条件锁pthread_cond_t - [Linux]
来源:互联网 发布:阿里云搭建游戏加速器 编辑:程序博客网 时间:2024/05/16 08:23
http://egeho123.blogbus.com/logs/10821816.html
2006年09月05日 12:42
说明,
等待线程
1。使用pthread_cond_wait前要先加锁
2。pthread_cond_wait内部会解锁,然后等待条件变量被其它线程激活
3。pthread_cond_wait被激活后会再自动加锁
激活线程:
1。加锁(和等待线程用同一个锁)
2。pthread_cond_signal发送信号
3。解锁
激活线程的上面三个操作在运行时间上都在等待线程的pthread_cond_wait函数内部。
程序示例:
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
pthread_mutex_t count_lock;
pthread_cond_t count_nonzero;
unsigned count = 0;
void * decrement_count(void *arg) {
pthread_mutex_lock (&count_lock);
printf("decrement_count get count_lock\n");
while(count==0) {
printf("decrement_count count == 0 \n");
printf("decrement_count before cond_wait \n");
pthread_cond_wait( &count_nonzero, &count_lock);
printf("decrement_count after cond_wait \n");
}
count = count -1;
pthread_mutex_unlock (&count_lock);
}
void * increment_count(void *arg){
pthread_mutex_lock(&count_lock);
printf("increment_count get count_lock\n");
if(count==0) {
printf("increment_count before cond_signal\n");
pthread_cond_signal(&count_nonzero);
printf("increment_count after cond_signal\n");
}
count=count+1;
pthread_mutex_unlock(&count_lock);
}
int main(void)
{
pthread_t tid1,tid2;
pthread_mutex_init(&count_lock,NULL);
pthread_cond_init(&count_nonzero,NULL);
pthread_create(&tid1,NULL,decrement_count,NULL);
sleep(2);
pthread_create(&tid2,NULL,increment_count,NULL);
sleep(10);
pthread_exit(0);
}
等待线程
1。使用pthread_cond_wait前要先加锁
2。pthread_cond_wait内部会解锁,然后等待条件变量被其它线程激活
3。pthread_cond_wait被激活后会再自动加锁
激活线程:
1。加锁(和等待线程用同一个锁)
2。pthread_cond_signal发送信号
3。解锁
激活线程的上面三个操作在运行时间上都在等待线程的pthread_cond_wait函数内部。
程序示例:
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
pthread_mutex_t count_lock;
pthread_cond_t count_nonzero;
unsigned count = 0;
void * decrement_count(void *arg) {
pthread_mutex_lock (&count_lock);
printf("decrement_count get count_lock\n");
while(count==0) {
printf("decrement_count count == 0 \n");
printf("decrement_count before cond_wait \n");
pthread_cond_wait( &count_nonzero, &count_lock);
printf("decrement_count after cond_wait \n");
}
count = count -1;
pthread_mutex_unlock (&count_lock);
}
void * increment_count(void *arg){
pthread_mutex_lock(&count_lock);
printf("increment_count get count_lock\n");
if(count==0) {
printf("increment_count before cond_signal\n");
pthread_cond_signal(&count_nonzero);
printf("increment_count after cond_signal\n");
}
count=count+1;
pthread_mutex_unlock(&count_lock);
}
int main(void)
{
pthread_t tid1,tid2;
pthread_mutex_init(&count_lock,NULL);
pthread_cond_init(&count_nonzero,NULL);
pthread_create(&tid1,NULL,decrement_count,NULL);
sleep(2);
pthread_create(&tid2,NULL,increment_count,NULL);
sleep(10);
pthread_exit(0);
}
- 条件锁pthread_cond_t - [Linux]
- linux条件锁pthread_cond_t使用示例
- pthread_cond_t 条件锁
- 条件锁pthread_cond_t
- 条件锁pthread_cond_t 的应用
- 条件锁pthread_cond_t 的应用
- Linux多线程编程详解----条件变量pthread_cond_t
- Linux多线程编程详解----条件变量pthread_cond_t
- 线程条件变量pthread_cond_t和线程条件锁详解
- Linux多线程编程详细解析----条件变量 pthread_cond_t
- Linux多线程编程详细解析----条件变量 pthread_cond_t
- Linux多线程 编程详细解析----条件变量 pthread_cond_t
- Linux多线程编程详细解析----条件变量 pthread_cond_t
- Linux多线程编程详细解析----条件变量 pthread_cond_t
- Linux多线程编程详细解析----条件变量 pthread_cond_t
- Linux多线程编程详细解析----条件变量 pthread_cond_t
- Linux多线程编程详细解析----条件变量 pthread_cond_t
- 线程条件变量pthread_cond_t
- 用javascript 创建ActiveX对象时出现:Automation server can't create object"(Automation 服务器不能创建对). 错误的解决办法
- debian学习笔记6,终端下打开图形操作界面,安装常用软件
- Windows打印
- 想象五年之后的你
- debian6安装openvpn
- 条件锁pthread_cond_t - [Linux]
- Oracle 客户端 使用 expdp/impdp 示例 说明
- HTML特殊符号对照表
- centos 安装openvpn
- lstrcpy、strcpy、_tcscpy、wcscpy
- Android 乱七八糟
- 文件管理系统
- C# 导出excel 生成excel
- 【Machine Learning实验5】SVM实验