Read-Write Lock †
実験 共有メモリ上でのpthread_rwlock
shared設定するとプロセス間でmutexを利用することができる。Read-Writeロックについて、Linuxではwriteロック待ちのスレッドがいても、readロックが取得できてしまう?現象があるようだ。これについては、非標準のPTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP
を指定すると回避できる(実際に利用する場合には、各プラットフォームで要検証)
参考
- GNU/Linux でのスレッドプログラミング - on http://www.tsoftware.jp/nptl/
- Linux上でのマルチスレッドプログラミングの注意点 - on https://www.soum.co.jp/misc/individual/multi-thread/
- Man page of PTHREAD_RWLOCKATTR_SETKIND_NP - on https://linuxjm.osdn.jp/html/LDP_man-pages/man3/pthread_rwlockattr_setkind_np.3.html
- pthread_rwlockattr_setpshared() - プロセス共用読み取りまたは書き込みロック属性の設定 - on https://www.ibm.com/support/knowledgecenter/ja/SSLTBW_2.2.0/com.ibm.zos.v2r2.bpxbd00/rp0ras.htm
- マルチスレッドのプログラミング pthread_rwlockattr_setpshared(3T) - on https://docs.oracle.com/cd/E19455-01/806-2732/sync-58/index.html
- FreeBSD Manual Pages (pthread_rwlockattr_setpshared) - on https://www.freebsd.org/cgi/man.cgi?query=pthread_rwlockattr_setpshared&sektion=3&manpath=FreeBSD+11.1-stable
- pthread_rwlockattr_setpshared(3) - Linux man page - on https://linux.die.net/man/3/pthread_rwlockattr_setpshared
- glibc.git / nptl- on http://sourceware.org/git/?p=glibc.git;a=tree;f=nptl;h=d0ce23d37e9b77d6ff82ffdee0f7a1f8f137aa41;hb=HEAD
- The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition / pthread.h - threads - on http://pubs.opengroup.org/onlinepubs/009695399/basedefs/pthread.h.html
シグナル †
スレッドごとにシグナルマスクを持つ。シグナルはプロセスに送られ、複数のスレッドがいる場合は、実行中の任意のスレッドに送られる。どのスレッドが捕捉するかはシグナルマスクによる。特定のスレッドにシグナルを処理して欲しい場合は、他のスレッドでシグナルをブロックすればよい。
マルチスレッドプログラムでシグナルをマスクする場合、pthread_sigmask
関数を使用する。マルチスレッドプログラムで、sigprocmask
関数を使用した場合の動作は未定義となっている。
参考リンク †
- Linuxとpthreadsによる マルチスレッドプログラミング入門 (プログラミング基礎講座) - on http://www.amazon.co.jp/
- Pthreadsプログラミング - on http://www.amazon.co.jp/
- Man page of PTHREADS - on https://linuxjm.osdn.jp/html/LDP_man-pages/man7/pthreads.7.html
- Multithreaded Programming (POSIX pthreads Tutorial) - on https://randu.org/tutorials/threads/
- POSIX thread (pthread) libraries - on https://www.cs.cmu.edu/afs/cs/academic/class/15492-f07/www/pthreads.html
- マルチスレッドのプログラミング - on https://docs.oracle.com/cd/E19455-01/806-2732/index.html
- POSIXスレッド(2) - on http://www.hpcs.cs.tsukuba.ac.jp/~tatebe/lecture/h22/syspro/l7-thread.pdf
- マルチスレッド・プログラミング(1)/ Multithread programming (1) - on http://www.cs.tsukuba.ac.jp/~yas/cs/csys-2013/2013-10-08/
- CITO Research 2010 年 7 月 マルチコアのジレンマ ホワイト ペーパー - on https://www.agtech.co.jp/products/pervasive/psql/v11/pdf/WP_The_Multi-core_Dilemma.pdf
- GNU/Linux でのスレッドプログラミング- on http://www.tsoftware.jp/nptl/
- Pthreadのスタック
- 非同期シグナルセーフな関数
- 2.4.3 Signal Actions(非同期シグナルセーフな関数) - on http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html
- Linux - Man Page of Signal - on https://linuxjm.osdn.jp/html/LDP_man-pages/man7/signal.7.html
- fork(The Open Group Base Specifications Issue 6) - on http://pubs.opengroup.org/onlinepubs/009695399/functions/fork.html
- JPCERT/CC - SIG30-C. シグナルハンドラ内では非同期安全な関数のみを呼び出す - on https://www.jpcert.or.jp/sc-rules/c-sig30-c.html