linux编程实现三个线程ABC,并让它们顺次打印自己的ID,使用信号量
发布日期:2021-05-15 09:23:38 浏览次数:19 分类:精选文章

本文共 1562 字,大约阅读时间需要 5 分钟。

#include 
#include
#include
#include
#include
#include
static sem_t sem1, sem2, sem3; int global = 0; #define MAX 15 void *t1_exe(void *arg) { while (global < MAX) { printf("Thread 1: %d\n", global); sleep(1); global++; } } void *t2_exe(void *arg) { while (global < MAX) { printf("Thread 2: %d\n", global); sleep(1); global++; } } void *t3_exe(void *arg) { while (global < MAX) { printf("Thread 3: %d\n", global); sleep(1); global++; } } int main() { int i; pthread_t tid; sem_init(&sem1, NULL, 1); sem_init(&sem2, NULL, 1); sem_init(&sem3, NULL, 1); for (i = 0; i < MAX; i++) { sleep(1); printf("Main process: %d\n", i); if (i % 3 == 0) { printf("Creating thread %d\n", i); if (pthread_create(&tid, NULL, &t1_exe)) { printf("Error creating thread: %d\n", errno); return -1; } } else if (i % 2 == 0) { printf("Creating thread %d\n", i); if (pthread_create(&tid, NULL, &t2_exe)) { printf("Error creating thread: %d\n", errno); return -1; } } else { printf("Creating thread %d\n", i); if (pthread_create(&tid, NULL, &t3_exe)) { printf("Error creating thread: %d\n", errno); return -1; } } } sleep(15); printf("All threads created and running...\n"); return 0; }

以上代码展示了一个使用多线程技术和信号量管理的C语言程序。程序中定义了三个线程函数t1_exet2_exet3_exe,这些线程函数负责在global变量从1到15之间递增的过程中,分别输出不同的日志信息。主程序中使用信号量sem1sem2sem3进行线程同步,确保每个线程能够按照顺序执行。通过sem_init初始化信号量,sem_wait等待信号量释放,sem_post发送信号量给其他线程。程序通过pthread_create创建线程并使用errno处理错误信息。

程序的设计目标是模拟一个多线程环境下的信号量管理场景,展示信号量在避免竞态条件和保证线程有序执行中的应用。

上一篇:Linux下多线程传参问题
下一篇:UDP server/client实例

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年04月28日 16时32分10秒