LinuxCマルチスレッドプログラミング第1編:スレッド作成
1726 ワード
本人はAndroid NDK移植をしていた時にC言語スレッドに出会ったが、もちろんスレッドの内容は譚浩強の本では紹介されていない.AndroidシステムはLinuxカーネルを使用しているので、Linux CマルチスレッドプログラミングはAndroid NDKにとって非常に重要であり、Android Frameworkではこれらをより多く使用します.くだらないことはあまり言わないで,私たちは本題に入ります.
マルチスレッドを作成するにはどうすればいいですか?スレッドを作成する関数は、int pthread_です.create(pthread_t *thread,pthread_attr_t* attr ,void *(*start_routine)(void*),void * arg); 戻り値:0が正常に返され、エラー番号が返されませんでした.パラメータ:pthread_t*thread:本スレッドのidを指すアドレスを表します.このようにスレッドidのタイプはpthread_である.tは、現在のプロセスのスレッドの一意性を保証します.異なるシステムでpthread_tタイプは異なるタイプであり、整数、構造体である可能性があります.住所でもいいです.pthread_attr_t*attr:スレッド属性を表しますが、ここではあまり説明しません.一般的にNULLに設定すると、システムのデフォルト値が取られます.void*(*start_routine):Javaスレッドのrun()メソッドに似た関数アドレスです.スレッドが起動すると、この関数はコールバックします.void*arg:start_を表すroutineコールバック関数のパラメータ、Javaでrunメソッドにはパラメータがありません.これはそれらの重要な違いです.
ファイルを作成する.c
コンパイル実行:root@jefry-laptop:/home/jefry/Desktop/thread# gcc thread01.c -lpthreadroot@jefry-laptop:/home/jefry/Desktop/thread# ./thread01.out===================new thread,pid=2055,tid=3079015280//これはメインスレッド以外の実行結果============================================================================
マルチスレッドを作成するにはどうすればいいですか?スレッドを作成する関数は、int pthread_です.create(pthread_t *thread,pthread_attr_t* attr ,void *(*start_routine)(void*),void * arg); 戻り値:0が正常に返され、エラー番号が返されませんでした.パラメータ:pthread_t*thread:本スレッドのidを指すアドレスを表します.このようにスレッドidのタイプはpthread_である.tは、現在のプロセスのスレッドの一意性を保証します.異なるシステムでpthread_tタイプは異なるタイプであり、整数、構造体である可能性があります.住所でもいいです.pthread_attr_t*attr:スレッド属性を表しますが、ここではあまり説明しません.一般的にNULLに設定すると、システムのデフォルト値が取られます.void*(*start_routine):Javaスレッドのrun()メソッドに似た関数アドレスです.スレッドが起動すると、この関数はコールバックします.void*arg:start_を表すroutineコールバック関数のパラメータ、Javaでrunメソッドにはパラメータがありません.これはそれらの重要な違いです.
ファイルを作成する.c
#include
#include
#include
#include
#include
pthread_t ntid;
void printids(const char* s)
{
pid_t pid;
pthread_t tid;
pid = getpid(); // ID
tid = pthread_self(); //// ID
printf("=================%sthread,pid=%d,tid==%u
",s,(int)pid,(unsigned int)tid);
}
void *fn(void *arg)
{
printids(arg);
return NULL;
}
int main(void)
{
int err;
err = pthread_create(&ntid,NULL,fn,"new ");
printids("main ");
sleep(1); //
return 0;
}
コンパイル実行:root@jefry-laptop:/home/jefry/Desktop/thread# gcc thread01.c -lpthreadroot@jefry-laptop:/home/jefry/Desktop/thread# ./thread01.out===================new thread,pid=2055,tid=3079015280//これはメインスレッド以外の実行結果============================================================================