互斥锁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;

}
复制代码

 

posted @   Edver  阅读(280)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示