欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > 笔记整理—linux进程部分(9)互斥锁

笔记整理—linux进程部分(9)互斥锁

2024/11/6 12:35:34 来源:https://blog.csdn.net/qq_35229394/article/details/142759005  浏览:    关键词:笔记整理—linux进程部分(9)互斥锁

        互斥锁也叫互斥量,可以看作一种特殊的信号量。信号量可以>=0,大家可以排队使用信号量,互斥锁只有0、1,主要实现关键段保护,只能在某一时间给某一任务去调用这段资源,这段内容用之前上锁,用完时候解锁。

pthread_mutex_init()//申请互斥锁
pthread_mutex_destroy//销毁互斥锁
pthread_mutex_lock()//上锁
pthread_mutex_unlock()//解锁

        pthread_mutex_t mutex;定义互斥锁

int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);void *func(void *arg)
{sleep(1);//不与主线程抢占第一次上锁while(0==flag){pthread_mutex_lock(&mutex);......处理......pthread_mutex_unlock(&mutex);sleep(1);//不与主线程抢资源获取的锁}pthread_exit(NULL);//线程退出
}int main(void)
{pthread_mutex_init(&mutex,NULL);互斥锁初始化ret=pthread_create(&th,NULL,func,NULL);线程创建while(1){pthread_mutex_lock(&mutex);scanf("%s",buf);pthread_mutex_unlock(&mutex);......此时子线程解锁处理资源......sleep(1);//不与子线程抢处理}ret=pthread_join(th,NULL);//线程回收pthread_mutex_destroy(&mutex);//销毁互斥锁
}

        条件变量方式实现线程同步,首先这是线程特有的方法,支持阻塞与唤醒。

int pthread_cond_init(pthread_cond_t *restrict cond,const pthread_condattr_t *restrict attr);//初始化int pthread_cond_destroy(pthread_cond_t *cond);//销毁
int pthread_cond_wait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex);//等待
int pthread_cond_signal(pthread_cond_t *cond);//发信号一对一
int pthread_cond_broadcast(pthread_cond_t *cond);//发信号一对多

        以上就是常见的函数。

void *func(void *arg)
{while(0==flag){pthread_mutex_lock(&mutex);pthread_cond_wait(&cond,&mutex);......资源加工......pthread_mutex_unlock(&mutex);}pthread_exit(NULL);
}int main()
{pthread_mutex_init(&mutex,NULL);pthread_cond_init(&cond,NULL);ret=pthread_create(&th,NULL,func,NULL);    while(1){scanf("%s",buf);pthread_cond_signal(&cond);发信号让子线程干活......主线程干活......}ret=pthread_join(th,NULL);//子线程回收pthread_mutex_destroy(&mutex);//销毁锁pthread_cond_destroy(&cond);//销毁条件变量
}

        条件变量同步必须在解锁与开锁之间进行。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com