Linuxオペレーティングシステムの省電力文書に関する質問があります。
眠っている男3説明する:
スレッドの安全性に関しては、
sleep()
「MT-Unsafe sig:SIGCHLD / linux」があります。これは、Linux上でsleep()
シグナルハンドラを一時的にインストールできることを意味しますSIGCHLD
。
しかし、同じ文書には「Linuxsleep()
ではnanosleep(2)
。
これが確認されました睡眠の実装GNU標準ライブラリ内。
男性2nm睡眠説明する:
「POSIX.1は(
nanosleep
)信号と対話しないことを明示的に述べています。」 Nanosleepは、「呼び出しスレッドでハンドラ呼び出しをトリガーするシグナルを渡す」(nanosleepのマニュアルを参照)によって中断することができます。
質問は次のとおりです。
sleep(3)
Linuxで文書化の問題がありますか?
"MT-Unsafe sig:SIGCHLD/linux"のドキュメントは間違っているようです。文書によると、Linuxでこれをsleep(3)
使ってnanosleep(2)
も邪魔にならないからです。SIGCHLD
nanosleep(2)
それとも私が何かを見逃しているのでしょうか?
ベストアンサー1
texinfoでコメント源泉もっと明確に言えば:
@deftypefun {unsigned int} sleep (unsigned int @var{seconds})
@standards{POSIX.1, unistd.h}
@safety{@prelim{}@mtunsafe{@mtascusig{:SIGCHLD/linux}}@asunsafe{}@acunsafe{}}
@c On Mach, it uses ports and calls time. On generic posix, it calls
@c nanosleep. On Linux, it temporarily blocks SIGCHLD, which is MT- and
@c AS-Unsafe, and in a way that makes it AC-Unsafe (C-unsafe, even!).
それが嘘ではない場合、sleep(3)
Linuxにはブロック機能はありませんSIGCHLD
。これは古い解決策の残余です。2015年に削除されました)以前のLinuxのバグの場合(2.6.32で修正)
これは犯罪言語は以下で紹介されます。
* manual/time.texi: Document MTASC-safety properties.
author Alexandre Oliva <[email protected]>
Sat, 1 Feb 2014 04:51:51 +0000 (02:51 -0200)
committer Alexandre Oliva <[email protected]>
Sat, 1 Feb 2014 04:51:51 +0000 (02:51 -0200)
commit 23e5b8cb1ba7a31450bda75e3f06b7c76e175db4