pthread ライブラリを使った、簡単なスレッドの実装例です。
POSIXスレッド とは
ポジックススレッドと読む。Pthreadと呼ばれることが多い。Pthreadを使うにはpthreadライブラリが必要である。
コンパイル時には「-pthread」オプションを使う((「-lpthread」の場合もある))。
スレッドのメリット/デメリット
スレッドと似た仕組みとして、fork()による子プロセスの生成があるが、スレッドを使うことによる利点がある。
かなりザックリとまとめると、
メリット
- fork()より高速
- fork()よりスレッドを使うApache2のほうがスケーラビリティが高い
デメリット
- スレッド間の同期処理が面倒
- 利用するライブラリがスレッドに対応している必要がある
サンプルプログラム
こちらから引用。
終了を待つ必要がなければ、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);
}
実行結果
$ ./a.out
Thread 1
Thread 2
Thread 1 returns: 0
Thread 2 returns: 0
参考文献
![]() Pthreadsプログラミング |
![]() 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

