C言語 - スレッド pthread - 簡単な例
- 1. 概要
- 2. サンプル
1. 概要
概要を書いたまま、放ったらかしだったので、一例ぐらい、サンプルを書いておきます(2021年10月12日)。
明確な目的があってプログラムを書く方が、ある意味楽ですな。
すれっどなんか、意味もなく、わいて起き上がらせるのってサンプルが書きにくいもです。
参考にさせていただくようなサイトも、なかなか見つからず・・・。
本ページは、下記のサイトを参考にさせていただきました。
「C言語でのスレッド処理」
2. サンプル
こんな感じで書いてみました。
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
void *my_thread(void *p)
{
printf("thread start\n");
printf("p = %2d\n", *(int*)p);
*(int*)p += 1;
printf("p = %2d\n", *(int*)p);
printf("thread が終わるまで待ってね\n");
return 0;
}
int main(void)
{
int i;
int a = 0;
pthread_t pthread;
pthread_create(&pthread, NULL, &my_thread, &a);
printf("thread が終わるまで待つよ\n");
pthread_join(pthread, NULL);
printf("thread が終わったよ\n");
printf("a = %2d\n", a);
return 0;
}
これ、「Clang」でコンパイル・リンクするには
clang ソースファイル名.c -pthread
と「-pthread」をつけて「libpthread.a」だか「libpthread.so」だかのライブラリをリンクしてやる必要があります。
ま、「GCC」でも、似たようなものな、はずです。
このプログラムを実行すると
thread start
p = 0
p = 1
thread が終わるまで待ってね
thread が終わるまで待つよ
thread が終わったよ
a = 1
だったり
thread が終わるまで待つよ
thread start
p = 0
p = 1
thread が終わるまで待ってね
thread が終わったよ
a = 1
だったりします。
あえて、呼び出し側とスレッドの間で、同期をとっていないので、最後の2行より前にどういう順番で動くかは補償されません。
(あ、同じルーチン内は、もちろん上から下ですよ)
|
|