web-dev-qa-db-ja.com

pthread_mutex_lockの実装方法

スレッド間の同期に関連する機能がUnix内でどのように実装されているかを知りたいだけです。たとえば、pthread_mutex_lockを呼び出すとどうなりますか?使用中のポインターはありますか?ソースコードへの参照は本当に役立ちます。

40
avd

これは複雑であり、UnixからUnixバリアントとは異なります。

たとえば、Linuxでは、Futex(Short for Fast Userspace Mutex)というシステムが使用されます。

このシステムでは、アトミックな増分およびテスト操作がユーザー空間のミューテックス変数で実行されます。

操作の結果がロックに競合がないことを示している場合、pthread_mutex_lockの呼び出しは、コンテキストがカーネルに切り替えられることなく返されるため、ミューテックスを取得する操作は非常に高速になります。

競合が検出された場合にのみ、システムコール(futexと呼ばれます)が実行され、カーネルへのコンテキストスイッチが発生し、ミューテックスが解放されるまで呼び出しプロセスがスリープ状態になります。

特に信頼性の高い、または優先度の高い継承ミューテックスには、さらに多くの詳細がありますが、これがその本質です。

詳細については、 http://linux.die.net/man/2/futex および http://en.wikipedia.org/wiki/Futex を参照してください

56
gby

Linuxでは、pthreadはlibcから入手できます。通常はglibcであり、ソースは利用可能です here

これを確認してください 参照

6
karlphillip