1

フロリダ州立大学の pthread 標準の実装が、ひょっとして、再帰的ミューテックスを処理できるかどうか疑問に思っています。残念ながら、FSU の実装に関するドキュメントはかなり貧弱であり、ミューテックスを再帰的として宣言する可能性についても言及していません。

次のようにミューテックスを宣言しようとしています:

pthread_mutex_attr mutex_attr;
pthread_mutexattr_init (&mutex_attr);
pthread_mutexattr_settype(&mutex_attr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init(&mutex, NULL);

FSU pthreads ライブラリを使用してコンパイルすると、次のエラー リストが表示されます。

test.c:25: error: `pthread_mutex_attr' undeclared (first use in this function)
test.c:25: error: (Each undeclared identifier is reported only once
test.c:25: error: for each function it appears in.)
test.c:25: error: parse error before "mutex_attr"
test.c:27: error: `mutex_attr' undeclared (first use in this function)
test.c:28: error: `PTHREAD_MUTEX_RECURSIVE' undeclared (first use in this function)

私のマシンで(非FSU)pthread実装で同じコードをコンパイルしようとすると、動作します。

些細なことを避けるために、デフォルトでは、POSIX ミューテックスは再帰的ではないことを事前にお伝えします。

FSU 実装で再帰的ミューテックスを利用する方法はないと結論付けるべきですか、それともこれらを実現する別の方法 (つまり、ミューテックスを再帰的として宣言する別の方法) があるのでしょうか?

4

1 に答える 1

1

いいえ、FSU pthreads 実装は再帰的ミューテックスをサポートしていません。実際、最新のリリースにはミューテックス タイプの概念がありません。ミューテックスの型名がないだけでなく、ミューテックスの型を操作するために使用される関数と関数PTHREAD_MUTEX_*も省略されています。pthread_mutexattr_settype()pthread_mutexattr_gettype()

于 2010-11-18T22:47:23.850 に答える