当前位置: 技术问答>linux和unix
pthread_create 创建线程的时候如何让他先暂停,等我让他运行才运行?
来源: 互联网 发布时间:2017-01-03
本文导语: pthread_create 创建线程的时候如何让他先暂停,等我让他运行才运行? 就像CreateThread 传递 暂停 的参数 那样。。。创建成功后,我不想让他先运行 等会运行 怎么做呢? | 方法很多,土一...
pthread_create 创建线程的时候如何让他先暂停,等我让他运行才运行?
就像CreateThread 传递 暂停 的参数 那样。。。创建成功后,我不想让他先运行 等会运行 怎么做呢?
就像CreateThread 传递 暂停 的参数 那样。。。创建成功后,我不想让他先运行 等会运行 怎么做呢?
|
方法很多,土一点用哨兵,直到哨兵值改变才可以开始运行
高级一点的,可以用同步之类的方法,线程启动后阻塞,当需要它运行时候不让他阻塞
高级一点的,可以用同步之类的方法,线程启动后阻塞,当需要它运行时候不让他阻塞
|
期待详解!
|
创建线程时传入一个Pipe,线程函数内阻塞读pipe,或者select pipe都行,想启动的时候写1字节进去.
|
互斥量+条件变量也一样,啥都行,只要能通知,FIFO,消息队列,信号量,爱咋咋地,你能折腾对都是可以实现的.
|
示例一个,程序不完整,仅供参考:
#define PERMS S_IRUSR|S_IWUSR
int semId;
void *thread1(void *arg){
struct sembuf sem;
sem.sem_num=0;
sem.sem_op=-1;
sem.sem_flg=0;
if(semop(semId,&sem,1) == -1){
printf("semop error");
exit(1);
}
printf("child thread...n");
}
int main()
{
pthread_t pid;
int err, i;
struct sembuf sem;
semId = semget(IPC_PRIVATE,1,PERMS);
if(semId ==-1)
{
exit(1);
}
sem.sem_num=0;
sem.sem_op=1;
sem.sem_flg=0;
err = pthread_create(&pid,NULL,thread1,NULL);
for(i=1; i