[C言語]POSIXスレッドプログラミング サンプル



pthread ライブラリを使った、簡単なスレッドの実装例です。

POSIXスレッド とは

ポジックススレッドと読む。Pthreadと呼ばれることが多い。Pthreadを使うにはpthreadライブラリが必要である。
コンパイル時には「-pthread」オプションを使う((「-lpthread」の場合もある))。

# gcc -pthread source.c

スレッドのメリット/デメリット

スレッドと似た仕組みとして、fork()による子プロセスの生成があるが、スレッドを使うことによる利点がある。
かなりザックリとまとめると、
メリット

デメリット

  • スレッド間の同期処理が面倒
  • 利用するライブラリがスレッドに対応している必要がある

サンプルプログラム

こちらから引用。

POSIXスレッドでは、pthread_create()を使って、新しいスレッドを生成し、pthread_join()を使ってスレッドが終了するのを待つ。
終了を待つ必要がなければ、pthread_detach()を使って切り離せばよい。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

void *print_message_function( void *ptr );

main()
{
     pthread_t thread1, thread2;
     char *message1 = "Thread 1";
     char *message2 = "Thread 2";
     int  iret1, iret2;

    /* Create independant threads each of which will execute function */

     iret1 = pthread_create( &thread1, NULL, print_message_function, (void*) message1);
     iret2 = pthread_create( &thread2, NULL, print_message_function, (void*) message2);

     /* Wait till threads are complete before main continues. Unless we  */
     /* wait we run the risk of executing an exit which will terminate   */
     /* the process and all threads before the threads have completed.   */

     pthread_join( thread1, NULL);
     pthread_join( thread2, NULL); 

     printf("Thread 1 returns: %d\n",iret1);
     printf("Thread 2 returns: %d\n",iret2);
     exit(0);
}

void *print_message_function( void *ptr )
{
     char *message;
     message = (char *) ptr;
     printf("%s \n", message);
}

実行結果

$ gcc -pthread sample.c
$ ./a.out
Thread 1
Thread 2
Thread 1 returns: 0
Thread 2 returns: 0

参考文献

Pthreadsプログラミング
Pthreadsプログラミング
Pスレッドプログラミング
Pスレッドプログラミング

参考URL

スレッド・プログラミング
http://www.coins.tsukuba.ac.jp/~yas/coins/dsys-1998/1999-01-19/pthread.html
YoLinux Tutorial: POSIX thread (pthread) libraries
http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html
スレッドを用いるメリット
http://mikilab.doshisha.ac.jp/dia/research/person/yoshiki/06.html
Manpage OF PTHREAD_CREATE
http://www.linux.or.jp/JM/html/glibc-linuxthreads/man3/pthread_create.3.html
Manpage OF PTHREAD_JOIN
http://www.linux.or.jp/JM/html/glibc-linuxthreads/man3/pthread_join.3.html
Manpage OF PTHREAD_DETACH
http://www.linux.or.jp/JM/html/glibc-linuxthreads/man3/pthread_detach.3.html

構築環境

FreeBSD 4.10-RELEASE

Comments are closed.