源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

互斥量mutex的简单使用(实例讲解)

  • 时间:2021-09-22 07:21 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:互斥量mutex的简单使用(实例讲解)
[b]几个重要的函数:[/b] #include <pthread.h> int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutex_t *restrict attr);    //初始化mutex int pthread_mutex_destroy(pthread_mutex_t *mutex);  //如果mutex是动态分配的,则释放内存前调用此函数。 int pthread_mutex_lock(pthread_mutex_t *mutex);    //加锁 int pthread_mutex_trylock(pthread_mutex_t *mutex);  //若已有其他线程占用锁,则返回EBUSY,否则返回0,不阻塞。 int pthread_mutex_unlock(pthread_mutex_t *mutex);   //解锁 [b]例程: [/b]
[u]复制代码[/u] 代码如下:
#include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <pthread.h> #include <errno.h> int a = 100; int b = 200; pthread_mutex_t lock; void * threadA() {     pthread_mutex_lock(&lock);     printf("thread A got lock!\n");     a -= 50;     sleep(3);        //如果不加锁,threadB输出会是50和200     b += 50;        //加锁后会sleep 3秒后,并为b加上50 threadB才能打印     pthread_mutex_unlock(&lock);     printf("thread A released the lock!\n");     a -= 50; } void * threadC() {        sleep(1);     while(pthread_mutex_trylock(&lock) == EBUSY) //轮询直到获得锁     {         printf("thread C is trying to get lock!\n");         usleep(100000);     }     printf("thread C got the lock!\n");     a = 1000;     b = 2000;     pthread_mutex_unlock(&lock);     printf("thread C released the lock!\n"); } void * threadB() {     sleep(2);                //让threadA能先执行     pthread_mutex_lock(&lock);     printf("thread B got the lock! a=%d b=%d\n", a, b);     pthread_mutex_unlock(&lock);     printf("thread B released the lock!\n", a, b); } int main() {     pthread_t tida, tidb, tidc;     pthread_mutex_init(&lock, NULL);     pthread_create(&tida, NULL, threadA, NULL);     pthread_create(&tidb, NULL, threadB, NULL);     pthread_create(&tidc, NULL, threadC, NULL);     pthread_join(tida, NULL);     pthread_join(tidb, NULL);     pthread_join(tidc, NULL);     return 0; }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部