可以wait()替换sleep()或delay()吗?

时间:2015-10-01 10:22:10

标签: c multithreading

我的程序中有两个独立的线程,我想创建一个线程(比如Thread1)来延迟5s,这样另一个线程(比如Thread2)就可以完成。但是它们并没有相互分叉,两者都是单独的子线程。我知道我可以使用delay()或sleep()但是我可以在Thread1中使用wait(5000)来延迟5s吗?或Wait()只能由父线程调用?

1 个答案:

答案 0 :(得分:5)

等待

来自wait手册:

#include <sys/types.h>
#include <sys/wait.h>

pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);
int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);
  

所有这些系统调用都用于等待a中的状态更改          呼叫过程的孩子,并获取有关孩子的信息          其状态发生了变化。状态变化被认为是:          孩子被终止;孩子被一个信号拦住了;或者孩子是          通过信号恢复。

因此,wait使用指向整数int(*))的指针,但这用于获取子项的返回状态。做wait(5000)不会等待5秒。正如评论中@alk所述,这样做很可能使您的程序崩溃。

睡眠

sleep等待一定量的,但是如果Thread1被中断的时间超过了这个时间(非常不太可能,但是谁知道...),你的sleep将变得毫无用处。

在pthread_join

要等待线程完成,您可以使用pthread_join。从它的手册:

int pthread_join(pthread_t thread, void **retval);
  

pthread_join()函数等待线程指定的线程          终止。如果该线程已经终止,那么          pthread_join()立即返回。线程指定的线程          必须可以加入。

使用pthread系列函数时,请记得使用 -pthread 进行编译和链接。

您的问题是:可以等待()替换sleep()或延迟()吗?

答案:否。