【问题标题】:Does a nanosleep() in main thread affect other threads?主线程中的 nanosleep() 会影响其他线程吗?
【发布时间】:2017-02-28 08:33:38
【问题描述】:

我的问题是关于 c unix 中的函数nanosleep。如果我在main函数中放了一个nanosleep,其他线程会不会受到影响?

【问题讨论】:

  • 是的,它会影响其他线程——它可能会给其他线程更多的执行时间。
  • 感谢您的回答

标签: c multithreading unix


【解决方案1】:

不,只有“当前”线程被挂起。

main()函数运行在程序的主线程中,用nanosleep()挂起它只会挂起主线程,其他所有线程都会继续正常执行。

来自nanosleep(2) 手册页

nanosleep() 暂停调用线程的执行,直到 至少 *req 中指定的时间已经过去,或交付的 在调用中触发处理程序调用的信号 线程或终止进程。

在 POSIX(比 unix 更通用)中,您可以使用 pthread_join() 使主线程阻塞直到另一个线程退出。

【讨论】:

  • 我相信一些历史手册页在这里错误地说“进程”而不是“线程”——这可能是 OP 混乱的根源。但是这个答案是完全正确的。
  • @R.. 我不确定是否在所有情况下都说手册页完全错误,如果我记得进程早于线程,至少在 Unix 和 Linux 世界中,因此当时它是正确的说那里的过程。
  • @Vality:我很确定nanosleep 函数足够新,以至于 POSIX 在添加它时已经有了线程。它似乎已在包含线程的第 5 期(SUSv2)中添加。
  • 非常感谢您的回答!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-10
  • 1970-01-01
  • 2015-12-15
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多