【发布时间】:2017-02-28 08:33:38
【问题描述】:
我的问题是关于 c unix 中的函数nanosleep。如果我在main函数中放了一个nanosleep,其他线程会不会受到影响?
【问题讨论】:
-
是的,它会影响其他线程——它可能会给其他线程更多的执行时间。
-
感谢您的回答
标签: c multithreading unix
我的问题是关于 c unix 中的函数nanosleep。如果我在main函数中放了一个nanosleep,其他线程会不会受到影响?
【问题讨论】:
标签: c multithreading unix
不,只有“当前”线程被挂起。
main()函数运行在程序的主线程中,用nanosleep()挂起它只会挂起主线程,其他所有线程都会继续正常执行。
来自nanosleep(2) 手册页
nanosleep()暂停调用线程的执行,直到 至少 *req 中指定的时间已经过去,或交付的 在调用中触发处理程序调用的信号 线程或终止进程。
在 POSIX(比 unix 更通用)中,您可以使用 pthread_join() 使主线程阻塞直到另一个线程退出。
【讨论】:
nanosleep 函数足够新,以至于 POSIX 在添加它时已经有了线程。它似乎已在包含线程的第 5 期(SUSv2)中添加。