0

https://computing.llnl.gov/tutorials/pthreads/samples/join.c

上記のリンクで pthreads コードを見ています。

上記のコードで変数 t と BusyWork および main メソッドの status に対して行われている型キャストを理解できません。

pthread_exit の man ページから:

retval が指す値は、呼び出し元のスレッドのスタック上に配置しないでください。そのスタックの内容は、スレッドの終了後に未定義になるためです。

したがって、この例の型キャストは、終了したばかりのスレッドのスタックでメモリを参照することを回避しようとしていると思います。しかし、そのタイプキャスティングは非常に不便で奇妙だと思います。誰か説明できますか?

4

1 に答える 1

1

pthread_create でスレッドを作成する場合、引数は に制限されsizeof(void *)ます。通常は、引数のサイズよりも大きい構造体またはその他のデータへのポインターを渡すために使用します。

この例では、引数long tのサイズが より小さいsizeof(void *)ため、引数を pthread_create() 呼び出しに直接渡すことができます。

明示的なキャストは、型 (long) または型 (void *) に割り当てられたメモリに違いがある場合、コンパイラによって修正されることを保証するために行われます。

実際には、これらのキャストはほとんどのプラットフォームで何もしませんが、それを保証することはできないため、引数を使用する前に正しい型に明示的にキャストする必要があります。

再開: この例では、型をリテラル ポインターとしてではなくtypevoid *として使用しているため、変数は何も逆参照しません。longstatus

于 2013-05-08T19:19:46.593 に答える