私は今POSIXスレッドについて学んでいますが、これはマルチスレッドに関する一般的な質問にすぎないと思いますので、誰かが私を助けてくれることを願っています。私が取り組んでいる本から、競合状態を示すこの例があります。
void *thread_main(void *thread_number) {
printf("In thread number %d.\n", *(int *)thread_number);
}
void main() {
int i = 0;
pthread_t thread;
for( i = 0; i < 10; i++ ) {
printf("Creating thread %d.\n");
pthread_create(&thread, 0, thread_main, &i);
printf("Created thread %d.\n");
}
}
これについて私が理解していないことがいくつかあります。まず、「スレッド番号5」です。スレッド番号5にあるはずではありませんが、何度も印刷されます。この本では、例はスレッド8が何度も印刷されることを示しています。と言う部分もわかりません*(int *)thread_number
。これをthread_numberだけに変更しようとしましたが、それは私に何度も何度も奇妙な数字を与えました。
この本は実際にはこれを説明していません。誰かが私にここで何が起こっているのかを明確に説明してもらえますか?次のような印刷が行われない理由がわかりません。
> Creating thread 1.
> In thread number 1.
> Created thread 1.
> Creating thread 2.
> In thread number 2.
> Created thread 2.
「スレッド番号x」がマルチスレッド化されているので、私はそれを知っています。一部は異なる時期に提供されますが、作成したスレッドごとに1行の「スレッド番号x」が正確に10個ない理由がわかりません。
〜desi