怎么用C语言实现两个线程在Linux环境下打印

怎么用C语言实现两个线程在Linux环境下打印,第1张

#include <stdio.h>

#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资源


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7326105.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-04
下一篇2023-04-04

发表评论

登录后才能评论

评论列表(0条)

    保存