WEB开发网
开发学院操作系统Linux/Unix linux中多线程解析 阅读

linux中多线程解析

 2013-09-03 17:04:18 来源:开发学院   
核心提示:编译方法:gcc -Wall pthread_share_data.c -lpthread执行结果:new pthread ...a=5 new thread is created ...例程总结:可以看出来,我们在主线程更改了我们的全局变量a的值的时候,linux中多线程解析(4),我们新建立的线程则打印出来了改变的

编译方法:

gcc -Wall pthread_share_data.c -lpthread


执行结果:
new pthread ...
a=5
new thread is created ...


例程总结:
可以看出来,我们在主线程更改了我们的全局变量a的值的时候,我们新建立的线程则打印出来了改变的值,可以看出可以访问线程所在进程中的数据信息。

2、线程的终止

如果进程中任何一个线程中调用exit,_Exit,或者是_exit,那么整个进程就会终止,
与此类似,如果信号的默认的动作是终止进程,那么,把该信号发送到线程会终止进程。
线程的正常退出的方式:
(1) 线程只是从启动例程中返回,返回值是线程中的退出码
(2) 线程可以被另一个进程进行终止
(3) 线程自己调用pthread_exit函数
两个重要的函数原型:

#include <pthread.h>
void pthread_exit(void *rval_ptr);
/*rval_ptr 线程退出返回的指针*/

int pthread_join(pthread_t thread,void **rval_ptr);
/*成功结束进程为0,否则为错误编码*/


例程6
程序目的:线程正常退出,接受线程退出的返回码
程序名称:pthread_exit.c

/********************************************************************************************
** Name:pthread_exit.c
** Used to study the multithread programming in Linux OS
** A example showing a thread to exit and with a return code.
** Author:zeickey
** Date:2006/9/16
** Copyright (c) 2006,All Rights Reserved!
*********************************************************************************************/

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>

void *create(void *arg)
{
printf("new thread is created ... /n");
return (void *)8;
}

int main(int argc,char *argv[])
{
pthread_t tid;
int error;
void *temp;

error = pthread_create(&tid, NULL, create, NULL);

if( error )
{
printf("thread is not created ... /n");
return -1;
}
error = pthread_join(tid, &temp);

if( error )
{
printf("thread is not exit ... /n");
return -2;
}

printf("thread is exit code %d /n", (int )temp);
return 0;
}

编译方法:

gcc -Wall pthread_exit.c -lpthread


执行结果:
new thread is created ...
thread is exit code 8

例程总结:
可以看出来,线程退出可以返回线程的int数值。线程退出不仅仅可以返回线程的int数值,还可以返回一个复杂的数据结构。

例程7
程序目的:线程结束返回一个复杂的数据结构
程序名称:pthread_return_struct.c
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>

struct menber
{
int a;
char *b;
}temp={8,"zieckey"};
void *create(void *arg)
{
printf("new thread ... /n");
return (void *)&temp;
}

int main(int argc,char *argv[])
{
int error;
pthread_t tid;
struct menber *c;

error = pthread_create(&tid, NULL, create, NULL);

if( error )
{
printf("new thread is not created ... /n");
return -1;

上一页  1 2 3 4 5 6 7  下一页

Tags:linux 线程 解析

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接