使用C程序进行线程同步,按顺序打印数字

使用c程序进行线程同步,按顺序打印数字

给定线程,程序必须根据它们的优先级从0到10打印线程。

什么是线程?

线程是在程序内部运行的轻量级进程。一个简单的程序可以包含n个线程。

与Java不同,C/C++语言标准不支持多线程,POSIX线程(Pthreads)是C/C++中多线程的标准。C语言不包含任何内置的多线程应用程序支持,而是完全依赖于操作系统来提供此功能。

在我们的程序中如何工作?

为了使用线程函数,我们使用头文件#include。这个头文件将包含我们程序中与线程相关的所有函数,如pthread_create()等。

现在的任务是使用gcc编译器提供的pthread标准库来同步n个线程。思路是获取线程计数并在第一个线程中打印1,在第二个线程中打印2,在第三个线程中打印3,直到第十个线程。输出将根据线程的优先级包含从1到10的数字。

算法

StartStep 1 -> Declare global variables as int MAX=10 and count=1Step 2 -> declare variable thr of pthread_mutex_t and cond of pthread_cond_tStep 3 -> Declare Function void *even(void *arg)   Loop While(count  Declare Function void *odd(void *arg)   Loop While(count  In main()   Create pthread_t thread1 and pthread_t thread2   Call pthread_mutex_init(&thr, 0)   Call pthread_cond_init(&cond, 0)   Call pthread_create(&thread1, 0, &even, NULL)   Call pthread_create(&thread2, 0, &odd, NULL)   Call pthread_join(thread1, 0)   Call pthread_join(thread2, 0)   Call pthread_mutex_destroy(&thr)   Call pthread_cond_destroy(&cond)Stop

Example

的中文翻译为:

示例

#include #include #include int MAX = 10;int count = 1;pthread_mutex_t thr;pthread_cond_t cond;void *even(void *arg){   while(count < MAX) {      pthread_mutex_lock(&thr);      while(count % 2 != 0) {         pthread_cond_wait(&cond, &thr);      }      printf("%d ", count++);      pthread_mutex_unlock(&thr);      pthread_cond_signal(&cond);   }   pthread_exit(0);}void *odd(void *arg){   while(count < MAX) {      pthread_mutex_lock(&thr);      while(count % 2 != 1) {         pthread_cond_wait(&cond, &thr);      }      printf("%d ", count++);      pthread_mutex_unlock(&thr);      pthread_cond_signal(&cond);   }   pthread_exit(0);}int main(){   pthread_t thread1;   pthread_t thread2;   pthread_mutex_init(&thr, 0);   pthread_cond_init(&cond, 0);   pthread_create(&thread1, 0, &even, NULL);   pthread_create(&thread2, 0, &odd, NULL);   pthread_join(thread1, 0);   pthread_join(thread2, 0);   pthread_mutex_destroy(&thr);   pthread_cond_destroy(&cond);   return 0;}

输出

如果我们运行上述程序,它将生成以下输出

1 2 3 4 5 6 7 8 9 10

以上就是使用C程序进行线程同步,按顺序打印数字的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1443614.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 20:22:05
下一篇 2025年12月13日 03:58:30

相关推荐

  • 使用正则表达式的C++程序打印每个单词的首字母

    A useful tool for string operations is regex. This may be found in virtually all high-level当前的编程语言,包括C++。正则表达式(Regex)被用作通用搜索模式。例如,通过构建一个简单的字符串被称为正则表达式…

    2025年12月17日
    000
  • 使用赋值运算符计算带税金额的C程序

    问题 编写一个 C 程序,输入美元金额,然后添加 18% 的税金来显示金额。 解决方案 让我们考虑餐厅人员在顾客的每张账单上加收 18% 的税。 用于计算税的逻辑是 – value=(money + (money * 0.18)); 这笔钱应该乘以18%并添加到钱中,然后餐厅人员可以从顾…

    2025年12月17日
    000
  • C++程序来计算给定弧度值的双曲正弦

    普通三角函数类似于双曲函数,它们是使用双曲线而不是圆来定义的。在双曲几何中,双曲函数用于计算角度和距离。此外,它们还出现在许多线性微分方程、三次方程等的答案中。对于给定的角度$theta$。双曲正弦函数 sinh$(theta)$ 如下所示。 $$mathrm{sinh(x):=:frac{e^x:…

    2025年12月17日
    000
  • C++程序以找到给定值的反正切

    我们在三角学中最常使用的比率包括正弦、余弦、正切等等。您可以使用角度来计算这些比率。如果我们知道比率值,我们还可以使用反三角函数计算角度。 本课程将向您展示如何使用 C++ 的反正切 (arctan) 函数,使用正切值(以弧度为单位)计算角度。 atan() 函数 使用 atan() 技术和反三角正…

    2025年12月17日
    000
  • C程序计算线性回归

    问题 编写一个程序来实现线性回归算法。 用户需要输入总共的数值个数。 解决方案 使用C编程语言计算线性回归的解决方案如下: 线性回归通过将线性方程与观测数据相连接来找到两个变量之间的关系。一个变量是解释变量,另一个是因变量。 关于线性回归的逻辑如下所述: for(i=0;i<n;i++){ p…

    2025年12月17日
    000
  • C# 中的Monitor.Wait和Pulse – 底层的线程同步原语

    Monitor.Wait 和 Monitor.Pulse 是 C# 中基于对象的线程同步原语,用于实现等待-通知机制:Wait 释放锁并使线程进入等待队列,Pulse 向队列中一个线程发送唤醒信号但不释放锁,二者需配合循环条件检查使用。 在 C# 中,Monitor.Wait 和 Monitor.P…

    2025年12月17日
    000
  • C#的线程同步是什么?如何实现?

    线程同步是多线程编程中确保共享资源安全访问的关键机制,C#提供lock、Monitor、Mutex、SemaphoreSlim、ReaderWriterLockSlim、Interlocked等工具,以及并发集合和Channel等现代模式,用于解决竞态条件、数据不一致等问题,选择合适机制需权衡场景、…

    2025年12月17日
    000
  • c程序是由什么构成

    c程序是由函数构成,是由一个main函数和若干个其他函数构成的。函数是C程序的基本单位,被调用的函数可以是系统提供的库函数,也可以是用户根据需要自己定义的函数。 本教程操作环境:windows7系统、c99版本、Dell G3电脑。 C源程序是由函数组成的。函数是C程序的基本单位,被调用的函数可以是…

    2025年12月17日
    000
  • c程序如何编写x的y次方

    c程序编写x的y次方的方法:首先新建一个c语言的工程文件;然后定义两个参数n和k,分别表示输入的数和要求的次方数;最后用递归的方式将n乘以不断减小的k即可完成n次方的计算。 本文操作环境:windows7系统,Dell G3电脑/C11。 c程序怎么编写x的y次方? 新建一个c语言的工程文件,引入头…

    2025年12月17日 好文分享
    000
  • c语言程序总是从main函数开始执行吗?

    是的,一个C程序总是从main函数开始执行,而不论其在程序中的位置。在main函数中可以调用程序中的其他函数,而其他函数却不可以调用main函数;程序最后再从main函数中结束。 本教程操作环境:windows7系统、c99版本、Dell G3电脑。 C程序的执行总是从main函数开始,在main函…

    2025年12月17日
    000
  • 一个c程序的执行是从哪里开始到哪里结束

    一个C程序的执行是从main函数开始到main函数结束。C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性。 本文操作环境:windows10系统、thinkpad t480电脑。 一个C程序的执行是从main函数开始到…

    2025年12月17日
    000
  • C程序的完整开发过程包括哪几步

    C程序的完整开发过程包括:1、编辑;2、编译;3、连接;4、运行。C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。 开发一个C语言程序需要经过的四个步骤:编辑、编译、连接、运行。 (相关推荐:java课程) C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。…

    2025年12月17日
    000
  • c程序的执行是从什么开始到什么结束?

    C程序的入口是main函数,一般来说只要是正常运行结束的都是从main函数的第一句话开始,最后一句结束。 例如: int main()//程序开始{printf(“Hello!n”);return 0;//程序结束,返回值} 但如果程序执行到中间遇到 return(main函数里的) exit(不管…

    2025年12月17日 好文分享
    000
  • 一个c程序的执行是从什么开始到什么结束

    一个c程序的执行是从“main()”函数开始到“main()”函数结束,但是当代码中出现了exit函数,则是直接结束程序。 推荐:《c语言教程》 一个c程序的执行是从main()函数开始到main()函数结束。 一个C语言的执行是从本程序的main函数开始,到main函数结束,但需要注意的是,也是有…

    2025年12月17日
    000
  • c程序中宏展开是在什么时候进行的?

    c程序中宏展开是在什么时候进行的? 宏展开是在预处理阶段进行的。 C程序由源程序变为可执行文件的三个阶段是: 预处理阶段,由预处理器对程序文本中的宏进行展开。 编译阶段,由编译器对经过预处理后的程序进行编译,并生成目标文件 链接阶段,则链接器对目标文件和用到的函数库文件进行链接,生成可执行文件。 因…

    2025年12月17日
    000
  • C程序总是以main函数作为程序执行的起始行,对么

    c程序总是以main函数作为程序执行的起始行,对。 (推荐教程:C语言教程) 一个C程序总是从main函数开始执行,而不论其在程序中的位置。在main函数中可以调用程序中的其他函数,而其他函数却不可以调用main函数。程序最后再从main函数中结束。 main函数介绍: main函数,又称主函数,是…

    2025年12月17日
    000
  • 用c程序实现的算法必须要有输入个输出操作吗

    用c程序实现的算法必须要有输入个输出操作吗? 用C程序实现的算法可以没有输入但必须要有输出! 算法具有的5个特性是:有穷性;确定性;可行性;有0个或多个输入;有一个或多个输出。所以说,用C程序实现的算法可以没有输入但必须要有输出。 推荐:《c语言教程》 C语言是目前世界上最流行、使用最广泛的面向过程…

    2025年12月17日
    000
  • 从0自学C#12–线程同步解决方法汇总以及优缺点

    首先,肯定的一点:microsoft的framework class library(fcl)保证了所有静态方法都是线程安全的。 FCL不保证实例方法是线程安全的。因为假如全部添加锁定,会造成性能的巨大损失。另外,假如每个实例方法都需要获取和释放一个锁,事实上会造成最终在任何给定的时刻,你的应用程序…

    好文分享 2025年12月17日
    000
  • 怎样在Python中实现多线程同步?

    在Python中实现多线程同步,这可是个有趣且充满挑战的话题啊!让我们从最基本的问题开始解答,然后深入探讨如何在Python中实现多线程同步。 多线程同步的基本问题 在多线程编程中,同步是为了确保多个线程在访问共享资源时不会发生冲突。你可能会问,为什么需要同步?想象一下,如果多个线程同时尝试修改同一…

    2025年12月14日
    000
  • java 中notify()和 notifyAll()有什么区别?

    notify()唤醒一个等待线程,由JVM随机选择,适用于单一资源场景;notifyAll()唤醒所有等待线程,避免线程饥饿,推荐用于多条件或复杂逻辑,确保线程安全。 在 Java 中,notify() 和 notifyAll() 都是用于唤醒等待线程的方法,它们定义在 Object 类中,通常配合…

    2025年12月2日 java
    000

发表回复

登录后才能评论
关注微信