學習《POSIX多線程程序設計》筆記一


/*
* lifecycle.c
*
* Demonstrate the "life cycle" of a typical thread. A thread is
* created, and then joined.
*/

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
//#include "errors.h"

/*
* Thread start routine.
*/

void thread_routine (void)
{
int i =0;
for(i=0;i<10;i++)
{
printf(" i :%d \n",i);
sleep(2);
}
//退出 //里面可以寫退出信息
pthread_exit("");
}

void thread_routine_one (void)
{
int i =0;
for(i=0;i<15;i++)
{
printf("ii: %d \n",i);
sleep(2);
}
pthread_exit("");
}

int main (int argc, char *argv[])
{
pthread_t thread_id ,thread_id2;
void *thread_result;
int status;
//創建成功返回0 //並開始運行 thread_routine //書中此處錯誤//等於0 才是創建成功
//第一個參數為指向線程標識符的指針。
//第二個參數用來設置線程屬性。
//第三個參數是線程運行函數的起始地址。
//最后一個參數是運行函數的參數。
status = pthread_create (&thread_id, NULL, (void *)thread_routine, NULL);
if (status == 0)
{
printf("Create thread %d\n",thread_id);
}
status = pthread_create (&thread_id2, NULL, (void *)thread_routine_one, NULL);
if (status == 0)
{
printf("Create thread %d\n",thread_id2);
}
//阻塞 如果thread_id 沒結束 就會一直阻塞在這里
status = pthread_join (thread_id2, &thread_result);
if (status == 0)
{
// err_abort (status, "Join thread");
printf("Join thread %d \n",thread_id2);
}

status = pthread_join (thread_id, &thread_result);
if (status == 0)
{
printf("Join thread %d\n",thread_id);
}
return 0;
}




//---------- 下面一段代碼是獨立的,主要測試 pthread_join的第二個參數-------------------------


//pthread_join的第二個參數的解釋
//輸出線程的退出的消息
#include <stdio.h>
#include <pthread.h>
void thread1(char s[])
{
pthread_exit("hello"); //結束線程,返回一個值。
}
int main(void)
{
pthread_t id1;
void *a1;
int i,ret1;
char s1[]="This is first thread!";
ret1=pthread_create(&id1,NULL,(void *) thread1,s1);
pthread_join(id1,&a1);
printf("%s\n",(char*)a1); //輸出hello //是線程的退出信息
return 0;
}

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com