为什么线程无法正常工作?

时间:2016-01-28 13:23:12

标签: c multithreading pthreads

我正在解决大学问题。父进程通过管道向子进程提供一个文件中读取的数字( nThreads )。儿子必须执行 nThreads 线程并为 nThreads 秒休眠,并且每个线程必须打印由子进程给出的随机数并且休眠该随机数秒。 这些过程打印好了,但线程不是。什么在我的代码中没有用?

scope

请原谅我,如果我做错了什么,这是我第一次在这里问一些事情。

1 个答案:

答案 0 :(得分:0)

有很多错误:

首先,您将指针传递给int random但在线程中将参数(指针)转换为数字。要么必须将int random转换为指针,要么将线程转换args转换为long *,并从该指针读取内存。一旦你启动多个线程,后者将实际停止工作,因为你将在此期间更改变量内容,甚至留下该变量的范围。

其次,你不要等待线程。使用pthread_join等待线程。

第三,你只运行单个线程,你需要从0nThreads循环创建,一旦启动所有这些线程,请在类似的循环中调用pthread_join

第四,大多数平台上int的大小为4,而您只发送2个字节。这可能适用于低端平台,但在big endian上会失败。对sizeof(int)write使用read可使其更具便携性。