Linux IPC(mutex & cond)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Linux IPC(mutex & cond),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1731字,纯文字阅读大概需要3分钟。
内容图文
/*
* This demo shows how to use semaphore between threads.
*
*/
#include <pthread.h>
#include <semaphore.h>
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
/*
* Global shared resource
*/
struct shared_resouce {
int global_count;
pthread_mutex_t mutex;
pthread_cond_t cond;
} shr_res;
void mutex_clean(void *mutex)
{
pthread_mutex_unlock((pthread_mutex_t*)mutex);
}
void* thread_fun(void *arg)
{
printf("Thread:%ld active.\n", pthread_self());
while (1)
{
pthread_mutex_lock(&shr_res.mutex);
while (shr_res.global_count <= 0)
{
pthread_cond_wait(&shr_res.cond, &shr_res.mutex);
}
shr_res.global_count--;
printf("Thread %d decrease globar var.\n", pthread_self());
pthread_mutex_unlock(&shr_res.mutex);
sleep(2);
}
}
int main(int argc, char **argv)
{
pthread_t id1, id2;
/*
* Initialize globar var
*/
shr_res.global_count = 0;
if (pthread_mutex_init(&shr_res.mutex, NULL) != 0)
{
printf("Initialize mutex error!");
exit(-1);
}
if (pthread_cond_init(&shr_res.cond, NULL) != 0)
{
printf("Initialize condation var error!");
exit(-1);
}
pthread_create(&id1, NULL, thread_fun, NULL);
pthread_create(&id2, NULL, thread_fun, NULL);
/*
* In main thread, loop of increasing shr_res.global_count.
*/
while (1)
{
pthread_mutex_lock(&shr_res.mutex);
printf("Main thread increase global var.\n");
shr_res.global_count++;
if (shr_res.global_count > 0)
{
pthread_cond_signal(&shr_res.cond);
}
pthread_mutex_unlock(&shr_res.mutex);
sleep(3);
}
pthread_join(id1, NULL);
pthread_join(id2, NULL);
pthread_cond_destroy(&shr_res.cond);
pthread_mutex_destroy(&shr_res.mutex);
exit(0);
}
原文:http://www.cnblogs.com/qingxueyunfeng/p/4711203.html
内容总结
以上是互联网集市为您收集整理的Linux IPC(mutex & cond)全部内容,希望文章能够帮你解决Linux IPC(mutex & cond)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。