码海拾遗: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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· 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工具