linux 线程带参数,Linux中多线程编程并传递多个参数的简单例子
今天上午實驗了Linux下的多線程編程,并將多個參數傳遞給線程要執行的函數。
以下是實驗程序的源代碼:
/*********************** 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("調用pthread_join獲取線程1返回值出現錯誤!\n");
else
printf("pthread_join調用成功!線程1退出后帶回的值是%d\n",(int)thread_return1);
ret=pthread_join(thread2,&thread_return2);/*等待第二個線程退出,并接收它的返回值*/
if(ret!=0)
printf("調用pthread_join獲取線程2返回值出現錯誤!\n");
else
printf("pthread_join調用成功!線程2退出后帶回的值是%d\n",(int)thread_return2);
return 0;
}
void *thread1_func(void *arg)
{
int i;
struct argument *arg_thread1;/*這里定義了一個指向argument類型結構體的指針arg_thread1,用它來接收傳過來的參數的地址*/
arg_thread1=(struct argument *)arg;
for(i=0;i<=3;i++)
{
printf("我來自線程1,傳遞給我的參數是%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類型的結構體arg_thread2,用來接收傳過來的指針參數指向的值。這種方法和thread1_func函數中的方法都是可行的*/
arg_thread2=*(struct argument *)arg;
for(i=0;i<=3;i++)
{
printf("我來自線程2,傳遞給我的參數是%d,%s。\n",arg_thread2.num,arg_thread2.string);
sleep(2);
}
return (void *)456;
}
/*********************** 以上是 pthread.c 的內容***************************/
在Linux終端下用 gcc -o pthread
-lpthread pthread.c 命令進行編譯,注意應該加上
-lpthread
./pthread 運行
// 運行結果 ///
我來自線程2,傳遞給我的參數是2009,建國六十周年。
我來自線程1,傳遞給我的參數是1949,中華人民共和國成立。
我是最初的進程!
我來自線程2,傳遞給我的參數是2009,建國六十周年。
我是最初的進程!
我來自線程1,傳遞給我的參數是1949,中華人民共和國成立。
我是最初的進程!
我來自線程1,傳遞給我的參數是1949,中華人民共和國成立。
我來自線程2,傳遞給我的參數是2009,建國六十周年。
我來自線程2,傳遞給我的參數是2009,建國六十周年。
我來自線程1,傳遞給我的參數是1949,中華人民共和國成立。
pthread_join調用成功!線程1退出后帶回的值是123
pthread_join調用成功!線程2退出后帶回的值是456
=====================
可以從執行順序看出,線程之間存在著競爭,并非是按照固定次序運行。
總結
以上是生活随笔為你收集整理的linux 线程带参数,Linux中多线程编程并传递多个参数的简单例子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DNF剑魂怎么连啊
- 下一篇: “弦绝空咨嗟”下一句是什么