【c言語】マルチスレッドの使い方

  • URLをコピーしました!

c言語で、マルチスレッド を作成する方法について解説します。

目次

マルチスレッドプログラミングの概要

c言語でマルチスレッドを実現するために、pthreadライブラリを使用します。

pthreadライブラリには、以下の機能を持つ関数が用意されています。

関数機能
pthread_createスレッドの生成
pthread_exit現在のスレッドを終了する
pthread_join他のスレッドが終了するのを待つ
pthread_selfスレッドIDを得る
pthread_detachスレッドのリソースを開放
pthread_mutex_initミューテックスの初期化
pthread_mutex_lockミューテックスのロック
pthread_mutex_unlockミューテックスのアンロック

pthreadライブラリを使用する前の準備

pthreadライブラリ内の関数を使用する前に2点ほど準備することがあります。

1点目は、以下のようにpthreadライブラリをインクルードすることです。

#include <pthread.h>

2点目は、コンパイルする際にコマンドラインオプションに「-lpthread」をつけることです。

$ gcc threadCreate.c -lpthread

これでpthreadライブラリを使う準備ができました。

マルチスレッドプログラムの実装例

pthreadライブラリの準備ができたら、実際にマルチスレッドプログラムを実装します。

マルチスレッドプログラムを実現したソースコードは以下です。

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>

#define NUM_THREAD 3

void *threadFunc(void *arg);

int main(){

	int ret = 0;
	int i;
	pthread_t thread[NUM_THREAD];

	for(i = 0; i < NUM_THREAD; i++){
		if(0 != pthread_create(&thread[i], NULL, threadFunc, (void *)i)){
			printf("Failed to create thread thred num: %d", i);
		}
	}
	sleep(1);
	return 0;
}

void *threadFunc(void *arg){
	int thread_num = (int)arg;
	int i;
	int sum = 0;

	if( 2 == thread_num ){
		pthread_exit(NULL);
	}
	for(i = 1; i <= 10; i++){
		sum = sum + i;
	}
	printf("SUM: %d Thread: %d\n", sum, thread_num);
	return NULL;
}

実行結果は以下です。

SUM: 55 Thread: 0
SUM: 55 Thread: 1

生成したスレッドの数だけ「threadFunc」が実行されました。

これで、マルチスレッドプログラムを実現できました。

スレッドの作成方法についてイメージわきましたか?

イメージがわいたところで、使用したpthreadライブラリの関数について具体的に紹介していきます。

スレッドの作成

スレッドは、「pthread_create」関数で作成することができます。

「pthread_create」関数は、以下のように定義されています。

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                   void *(*start_routine) (void *), void *arg);

第1引数は、スレッドIDです。pthred_t型で定義した変数を格納します。

pthread_t thread[NUM_THREAD];

第2引数は、スレッドの属性です。基本的に「NULL」を格納すれば問題ありません。

第3引数は、スレッドで実行する関数を格納します。

第4引数は、第3引数で指定した関数の引数を格納します。

スレッドの終了

スレッドは、関数と同様に「return」がきたら終了します。

ですが、強制的に終了させたい場合は「pthread_exit」で終了可能です。

void pthread_exit(void *retval);

まとめ

c言語のマルチスレッドプログラムは、「pthread」ライブラリを使用することで、簡単に実現できます。

ぜひあなたもマルチスレッドを作成してみてください。

参考

おすすめ教材

楽天ブックス
¥2,728 (2024/12/18 12:47時点 | 楽天市場調べ)
よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

エンジニア。20代。組み込みエンジニアとして働き始めるも、働き方や業務内容に限界を感じ、 AI,Web3エンジニアを目指して勉強中。 エンジニアとして思うことや、学んだことを発信します。

目次