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
#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//これはメインスレッド以外の実行結果============================================================================