C Language
マルチスレッド
サーチ…
前書き
C11には標準のスレッドライブラリ<threads.h>
ありますが、まだ実装されていないコンパイラはありません。したがって、Cでマルチスレッドを使用するには、 pthread.h
ヘッダーを使用して、POSIXスレッドライブラリ(pthreadとも呼ばれます)などのプラットフォーム固有の実装を使用する必要があります。
構文
- thrd_t //スレッドを識別する実装定義の完全なオブジェクト型
- int thrd_create(thrd_t * thr、thrd_start_t func、void * arg); //スレッドを作成する
- int thrd_equal(thrd_t thr0、thrd_t thr1); //引数が同じスレッドを参照しているかどうかを調べる
- thr_t thrd_current(void); //それを呼び出すスレッドの識別子を返します
- int thrd_sleep(const構造体timespec * duration、構造体timespec * remaining); //少なくとも指定された時間、呼び出しスレッドの実行を中断する
- void thrd_yield(void); //それを呼び出すスレッドの代わりに他のスレッドを実行できるようにする
- _Noreturn void thrd_exit(int res); //スレッドを呼び出すスレッドを終了させる
- int thrd_detatch(thrd_t thr; //現在の環境から特定のスレッドを切り離す
- int thrd_join(thrd_t thr、int * res); //指定されたスレッドが終了するまで現在のスレッドをブロックする
備考
スレッドを使用すると、 http: //www.riptutorial.com/c/example/2622/data-raceなどの未定義の動作が追加される可能性があります 。異なるスレッド間で共有される変数へのレースフリーアクセスのために、C11はmtx_lock()
ミューテックス機能または(オプションの) http://www.riptutorial.com/c/topic/4924/atomicsデータ型および関連する関数を提供します。 stdatomic.h
。
C11スレッドの簡単な例
#include <threads.h>
#include <stdio.h>
int run(void *arg)
{
printf("Hello world of C11 threads.");
return 0;
}
int main(int argc, const char *argv[])
{
thrd_t thread;
int result;
thrd_create(&thread, run, NULL);
thrd_join(&thread, &result);
printf("Thread return %d at the end\n", result);
}
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow