日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 线程带参数,Linux中多线程编程并传递多个参数的简单例子

發(fā)布時間:2023/12/1 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 线程带参数,Linux中多线程编程并传递多个参数的简单例子 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天上午實驗了Linux下的多線程編程,并將多個參數(shù)傳遞給線程要執(zhí)行的函數(shù)。

以下是實驗程序的源代碼:

/*********************** pthread.c ***************************/

#include

#include

#include

#include

#include

struct argument

{

int num;

char string[30];

};

int main()

{

int i,ret;

void *thread1_func(void *);

void *thread2_func(void *);

void *thread_return1,*thread_return2;/*用來接收兩個線程退出后的返回值*/

pthread_t thread1,thread2;

struct argument arg1,arg2;

arg1.num=1949;

strcpy(arg1.string,"中華人民共和國成立");

arg2.num=2009;

strcpy(arg2.string,"建國六十周年");

pthread_create(&thread1,NULL,thread1_func,(void *)&arg1);

pthread_create(&thread2,NULL,thread2_func,(void *)&arg2);

for(i=0;i<=2;i++)

{

printf("我是最初的進程!\n");

sleep(2);

}

ret=pthread_join(thread1,&thread_return1);/*等待第一個線程退出,并接收它的返回值*/

if(ret!=0)

printf("調(diào)用pthread_join獲取線程1返回值出現(xiàn)錯誤!\n");

else

printf("pthread_join調(diào)用成功!線程1退出后帶回的值是%d\n",(int)thread_return1);

ret=pthread_join(thread2,&thread_return2);/*等待第二個線程退出,并接收它的返回值*/

if(ret!=0)

printf("調(diào)用pthread_join獲取線程2返回值出現(xiàn)錯誤!\n");

else

printf("pthread_join調(diào)用成功!線程2退出后帶回的值是%d\n",(int)thread_return2);

return 0;

}

void *thread1_func(void *arg)

{

int i;

struct argument *arg_thread1;/*這里定義了一個指向argument類型結(jié)構(gòu)體的指針arg_thread1,用它來接收傳過來的參數(shù)的地址*/

arg_thread1=(struct argument *)arg;

for(i=0;i<=3;i++)

{

printf("我來自線程1,傳遞給我的參數(shù)是%d,%s。\n",(*arg_thread1).num,(*arg_thread1).string);

sleep(2);

}

return (void *)123;

}

void *thread2_func(void *arg)

{

int i;

struct argument arg_thread2;/*這里定義了一個argument類型的結(jié)構(gòu)體arg_thread2,用來接收傳過來的指針參數(shù)指向的值。這種方法和thread1_func函數(shù)中的方法都是可行的*/

arg_thread2=*(struct argument *)arg;

for(i=0;i<=3;i++)

{

printf("我來自線程2,傳遞給我的參數(shù)是%d,%s。\n",arg_thread2.num,arg_thread2.string);

sleep(2);

}

return (void *)456;

}

/*********************** 以上是 pthread.c 的內(nèi)容***************************/

在Linux終端下用 gcc -o pthread

-lpthread pthread.c 命令進行編譯,注意應該加上

-lpthread

./pthread 運行

// 運行結(jié)果 ///

我來自線程2,傳遞給我的參數(shù)是2009,建國六十周年。

我來自線程1,傳遞給我的參數(shù)是1949,中華人民共和國成立。

我是最初的進程!

我來自線程2,傳遞給我的參數(shù)是2009,建國六十周年。

我是最初的進程!

我來自線程1,傳遞給我的參數(shù)是1949,中華人民共和國成立。

我是最初的進程!

我來自線程1,傳遞給我的參數(shù)是1949,中華人民共和國成立。

我來自線程2,傳遞給我的參數(shù)是2009,建國六十周年。

我來自線程2,傳遞給我的參數(shù)是2009,建國六十周年。

我來自線程1,傳遞給我的參數(shù)是1949,中華人民共和國成立。

pthread_join調(diào)用成功!線程1退出后帶回的值是123

pthread_join調(diào)用成功!線程2退出后帶回的值是456

=====================

可以從執(zhí)行順序看出,線程之間存在著競爭,并非是按照固定次序運行。

總結(jié)

以上是生活随笔為你收集整理的linux 线程带参数,Linux中多线程编程并传递多个参数的简单例子的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。