Linux多线程──主线程和子线程分别循环一定次数
来源:互联网 发布:网络骂人录音 编辑:程序博客网 时间:2024/05/17 04:15
条件变量
条件变量是线程可用的另一种同步机制。条件变量给多个线程提供了一个回合的场所。条件变量与互斥量一起使用时,允许线程以无竞争的方式等待铁定的条件发生。
名称:
pthread_cond_wait/pthread_cond_timedwait
目标:
条件变量等待
头文件:
#include < pthread.h>
函数原形:
int pthread_cond_wait(pthread_cond_t *cond,pthread_mutex_t *mutex);
int pthread_cond_timedwait(pthread_cond_t *cond,pthread_mutex_t mytex,const struct timespec *abstime);
参数:
cond 条件变量
mutex 互斥锁
返回值:
成功返回0,出错返回错误编号。
第一个参数*cond是指向一个条件变量的指针。第二个参数*mutex则是对相关的互斥锁的指针。
使用pthread_cond_wait等待条件变量变为真。
传递给pthread_cond_wait的互斥量对条件进行保护。调用者把锁住的互斥量传给函数,函数自动把调用线程放到等待条件的线程列表上,对互斥量解锁。这就关闭了条件检查和线程进入休眠状态等待条件改变这两个操作之间的时间通道,这样线程就不会错过条件的。pthread_cond_wait返回时,互斥量再次被锁住。
示例
子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码
#include <stdio.h>#include <stdlib.h>#include <pthread.h>#define LOOP 50int num = 0;int sub_parm = 0;int main_parm = 1;pthread_mutex_t mylock = PTHREAD_MUTEX_INITIALIZER;pthread_cond_t qready = PTHREAD_COND_INITIALIZER;void* thread_func(void *arg){int i, j;for (i = 0; i < LOOP; i++){pthread_mutex_lock(&mylock);while (sub_parm != num)pthread_cond_wait(&qready, &mylock);for (j = 0; j < 10; j++)printf("Sub thread: %d\n", j);num = (num + 1) % 2;pthread_mutex_unlock(&mylock);pthread_cond_signal(&qready);}return (void*) 0;}int main(){int i, k;pthread_t tid;void *tret;pthread_create(&tid, NULL, thread_func, NULL);for (i = 0; i < LOOP; i++){pthread_mutex_lock(&mylock);while (main_parm != num)pthread_cond_wait(&qready, &mylock);for (k = 0; k < 100; k++)printf("Main thread: %d\n", k + 100);num = (num + 1) % 2;pthread_mutex_unlock(&mylock);pthread_cond_signal(&qready);}pthread_join(tid, &tret);}
0 0
- Linux多线程──主线程和子线程分别循环一定次数
- Linux多线程──主线程和子线程分别循环一定次数
- Linux多线程──主线程和子线程分别循环一定次数
- 主线程和子线程分别循环一定次数
- 主线程和子线程中的消息循环
- 多线程demo-主线程和子线程交替运行
- 子线程主线程循环交替执行
- 主线程和子线程
- 主线程和子线程
- 主线程和子线程
- Linux主线程接收数据,子线程分别对其操作后输出
- 多线程之主线程与子线程
- 多线程NSThread+主线程子线程
- Python 多线程,主线程与子线程
- java多线程: 子线程循环10次,主线程接着循环100次,如此循环50次
- Java多线程面试题:子线程循环10次,接着主线程循环100,接着又回到子线程循环10次, 接着再回到主线程又循环100,如此循环50次
- 多线程学习--案例-子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次
- 多线程面试题:子线程循环10次,接着主线程循环100次;接着回到子线程循环10次,然后再回到主线程循环100次,如此交替50次。
- matlab中size()函数的用法
- Freely Available Software for Linear Algebra (August 2015) 各种求解器的总结
- 如何发送一条消息通过 Outlook 对象模型与 VC++
- 请教signal的问题
- 编写一个程序实现模式串的各种模式匹配
- Linux多线程──主线程和子线程分别循环一定次数
- 浅谈内存的泄漏(二)
- 怎样获取表单中multiple select的输入数据
- Quartz Core 图层编程
- 浅谈内存泄漏(三)
- ArrayList类的使用方法学习
- hdu 4763 Theme Section
- 你今天volatile了吗?--准确定位
- C++中 #ifdef 和#endif的作用