互斥锁Demo
#include <stdio.h> #include <pthread.h> pthread_t work1Id; pthread_t work2Id; int work1Ret = 1; int work2Ret = 2; pthread_cond_t cond_ready = PTHREAD_COND_INITIALIZER; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; int number = 0; void* Work1(void* args) { int i = 0; printf("I am work%d\n", *((int*)args)); for(i = 0; i < 10; i++) { pthread_mutex_lock(&mutex); number++; if(number%2==0) { printf("I am work%d, Finish\n", *((int*)args)); pthread_cond_signal(&cond_ready); sleep(1); } pthread_mutex_unlock(&mutex); printf("I am work%d, number = %d and unlock \n", *((int*)args), number); sleep(1); } return &work1Ret; } void* Work2(void* args) { printf("I am work%d\n", *((int*)args)); while(number <10) { pthread_mutex_lock(&mutex); if(number <= 10) { pthread_cond_wait(&cond_ready, &mutex); printf("I am work%d, number = %d receive SIG\n", *((int*)args), number); } pthread_mutex_unlock(&mutex); } return &work2Ret; } int main() { int args1 = 1; int args2 = 2; void* work1Ret = NULL; void* work2Ret = NULL; pthread_create(&work1Id, NULL, Work1, &args1); pthread_create(&work2Id, NULL, Work2, &args2); pthread_join(work1Id, &work1Ret); if(work1Ret != NULL) { printf("work1Ret = %d\n", *((int*)work1Ret)); } pthread_join(work2Id, &work2Ret); if(work2Ret != NULL) { printf("work2Ret = %d\n", *((int*)work2Ret)); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律