当前位置: 技术问答>linux和unix
linux编程—多线程的问题
来源: 互联网 发布时间:2016-11-12
本文导语: 如果有两个线程,线程1产生一个键盘字符(相当于一个命令)来控制线程2的行为 线程2一直监测有没有命令传递过来 同时线程2还要做自己的事情(等待命令的过程中不阻塞), 如果有命令传来,则做出相应的反应 ...
如果有两个线程,线程1产生一个键盘字符(相当于一个命令)来控制线程2的行为
线程2一直监测有没有命令传递过来
同时线程2还要做自己的事情(等待命令的过程中不阻塞),
如果有命令传来,则做出相应的反应
用什么机制可以实现这种等待的过程中还能做自己的事呢??????????
线程2一直监测有没有命令传递过来
同时线程2还要做自己的事情(等待命令的过程中不阻塞),
如果有命令传来,则做出相应的反应
用什么机制可以实现这种等待的过程中还能做自己的事呢??????????
|
条件变量与锁配合
|
如果线程2完全受线程1的控制 那么可以用一个消息队列通信 并用互斥锁保护 每次线程1受到控制字符时 进入临界区 将字符放进消息队列 如果此时队列为空 就说明线程2在睡眠 则唤醒线程1 否则就放进队列 然后退出临界区
如果不是这样(就是说 线程2只是优先接受线程1的 线程1可以抢占线程2的控制权) 那么还是信号吧
如果不是这样(就是说 线程2只是优先接受线程1的 线程1可以抢占线程2的控制权) 那么还是信号吧
|
可以考虑使用pipe(),
线程1向写端写数据,线程2从其中读数据。
线程2在读之前使用
void FD_CLR(int fd, fd_set *set);
int FD_ISSET(int fd, fd_set *set);
void FD_SET(int fd, fd_set *set);
void FD_ZERO(fd_set *set);
测试pipe中是否有数据。有的话,read()-->server();没有的话,执行其他的动作。
|
pthread_cond_wait 和pthread_cond_singal, 配合互斥锁