码海拾遗:Linux多线程mutex锁

  多线程计数,每个线程累加10个数。

  实现:

复制代码
  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <string.h>
  4 #include <errno.h>
  5 #include <pthread.h>
  6 
  7 pthread_mutex_t num_lock;
  8 
  9 int num = 0;
 10 int sum = 0;
 11 
 12 void* foo1()
 13 {
 14 #if 1
 15     pthread_mutex_lock(&num_lock);
 16     for(int i = 0;i<10;++i)
 17     {
 18         num += 1;
 19         sum += num;
 20         printf("thread 1,num = %d,sum = %d\n",num,sum);
 21         usleep(10);
 22     }
 23     pthread_mutex_unlock(&num_lock);
 24 #else
 25     for(int i = 0;i<10;++i)
 26     {
 27         num += 1;
 28         sum += num;
 29         printf("thread 1,num = %d,sum = %d\n",num,sum);
 30         usleep(10);
 31     }
 32 #endif
 33     return NULL;
 34 }
 35 
 36 void* foo2()
 37 {
 38 #if 1
 39     pthread_mutex_lock(&num_lock);
 40     for(int i = 0;i<10;++i)
 41     {
 42         num += 1;
 43         sum += num;
 44         printf("thread 2,num = %d,sum = %d\n",num,sum);
 45         usleep(10);
 46     }
 47     pthread_mutex_unlock(&num_lock);
 48 #else
 49     for(int i = 0;i<10;++i)
 50     {
 51         num += 1;
 52         sum += num;
 53         printf("thread 2,num = %d,sum = %d\n",num,sum);
 54         usleep(10);
 55     }
 56 #endif
 57     return NULL;
 58 }
 59 
 60 int main(int argc,char* argv[])
 61 {
 62     pthread_t tid1,tid2;
 63     int err;
 64 
 65     pthread_mutex_init(&num_lock,NULL);
 66 
 67     err = pthread_create(&tid1,NULL,foo1,NULL);
 68     if(err != 0)
 69     {
 70         printf("error code:%d,reason:%s\n",err,strerror(err));
 71         return -1;
 72     }
 73 
 74     err = pthread_create(&tid2,NULL,foo2,NULL);
 75     if(err != 0)
 76     {
 77         printf("error code:%d,reason:%s\n",err,strerror(err));
 78         return -1;
 79     }
 80 
 81     //for(int i = 0;i<10;++i)
 82     //    printf("main thread, num = %d\n",num++);
 83 
 84     err = pthread_join(tid1,NULL);
 85     if(err != 0)
 86     {
 87         printf("error code:%d,reason:%s\n",err,strerror(err));
 88         return -1;
 89     }
 90     err = pthread_join(tid2,NULL);
 91     if(err != 0)
 92     {
 93         printf("error code:%d,reason:%s\n",err,strerror(err));
 94         return -1;
 95     }
 96 
 97     pthread_mutex_destroy(&num_lock);
 98 
 99     return 0;
100 }
复制代码

 

posted @   落雷  阅读(245)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示