私はUnix Cを学び、練習をしています。私が取り組んでいる現在の問題は、POSIXスレッド(主にpthread_create()とpthread_join())に関係します。posixスレッド(pthread_createとpthread_join)
2つのスレッドを使って "Hello World"を繰り返し印刷するように求められます。 1つのスレッドは "Hello"を1000回印刷し、2番目のスレッドは "World"を1000回印刷します。メインのプログラム/スレッドは、処理を進める前に2つのスレッドが終了するのを待つことです。
これは私が今持っているものです。
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <pthread.h>
void *print_hello(void *arg)
{
int iCount;
for(iCount = 0; iCount < 1000; iCount++)
{
printf("Hello\n");
}
}
void *print_world(void *arg)
{
int iCount;
for(iCount = 0; iCount < 1000; iCount++)
{
printf("World\n");
}
}
int main(void)
{
/* int status; */
pthread_t thread1;
pthread_t thread2;
pthread_create(&thread1, NULL, print_hello, (void*)0);
pthread_create(&thread2, NULL, print_world, (void*)0);
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
return 0;
}
これは完全には機能していないようです。それは "Hello"を期待どおりに印刷します。しかし、 "世界"は全く印刷されていません。 2番目のスレッドがまったく実行されていないようです。私がpthread_joinを正しく使用しているかどうかはわかりません。私の意図は、メインスレッドがこれらの2つのスレッドを「待機」することです。
ご協力いただければ幸いです。
私にはうまく見え、期待どおりに動作します。しかし、あなたのスレッド関数の最後に 'return NULL'を追加したいかもしれません。 – JackOfAllTrades
あなたのコードにコメントするために、NULLは通常 "(void *)0"と定義されます。私はNULLを提案します。ヌルポインタがすべてのシステムで0として表される保証はなく、NULLは適切な値に定義されます。 –