
#include <pthread.h>
void thread()
{
pthread_t tid = pthread_self()
while(1)
{
printf("pthread %u\n", tid)
sleep(1)
}
}
int main(int argc, char *argv[])
{
pthread_t tid = 0
if (0 != pthread_create(&tid, NULL, (void *)thread, NULL))
{
printf("create pthread %u error\n", tid)
return -1
}
if (0 != pthread_create(&tid, NULL, (void *)thread, NULL))
{
printf("create pthread %u error\n", tid)
return -1
}
while (1)
{
printf("main\n")
sleep(1)
}
return 0
}
//编译记得加-lpthread
主要理解在fork函数。你可以参考
这会产生分支,
fork会产生一个子进程。
根据fork的返回值的不同运行不同的代码。
在子进程返回值是0,而父进程就是调用这个函数的进程中返回的则是进程的ID也就是>0。
所以在子进程中执行
pthread_attr_init(&attr)
pthread_create(&tid,&attr,runner,NULL)
pthread_join(tid,NULL)
printf("CHILD:value=%d",value)
这个子进程会启动一个线程
void*runner(void*param){
value=5
pthread_exit(0)
}
让value=5
所以输出
CHILD:value=5;
而父进程则执行
wait(NULL)
printf("PARENT:value=%d",value)
由于wait()所以它会暂停父进程,等待子进程结束。
子进程结束后,然后父进程运行输出
PARENT:value=0
至于为什么是0,因为子进程和父进程的数据是在内存中各有一份的。
子进程只是改变了它那份。父进程中还是0.
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
vaela
创建2个线程,一个为GetInput,一个为PutInputSum,功能分别为接收输入和打印整数和的功能void GetInput(char *arg)
{
while(1)
{
//一直等待输入
if(有输出)
{
//获取信号量a
//保存2个整数值
//释放信号量b
}
}
}
void PutInputSum()
{
while(1)
{
//阻塞获取信号量b
//计算2个整数的和,并输出
//释放信号量a
}
}
兄弟,伪码基本是这样了,具体的要自己实现。只要是利用信号量实现同步。2个线程,在没有输入的情况下都是阻塞的,不消耗CPU资源
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)