Linux 多线程编程之基本控制
作者 斯人 | 发布于 2013 年 2 月 18 日
Linux C

线程基本控制

1、线程创建

int pthread_create(pthread_t *pid,pthread_attr_t *attr,void *(start_routine)(void*),void *arg);

pthread_create创建一个线程,这个线程将执行函数start_routine,该函数的参数由arg提供,可以调用pthread_exit 终止线程或

函数执行完时终止。attr是线程属性,暂时先设置为NULL,后面讲。

每一个进程都共享一个地址空间和资源,它跟fork进程不同,每一个进程都有自己的地址空间和资源。

执行成功返回0,执行失败返回非0。

2、获取线程ID。

pthread_t *pthread_self();

3、结束线程

void pthread_exit(void *retval);

retval 是执行该函数的返回值,成功则0,失败返回-1。

4、挂起线程

int pthread_join(pthread_t *tid,void **thread_return);

该函数用于挂起线程,直至 该线程终止,tid是线程id,thread_return 是线程的返回值。

5、演示

/*
 * =====================================================================================
 *
 *       Filename:  main.c
 *
 *    Description:  i
 *
 *        Version:  1.0
 *        Created:  02/18/2013 10:46:58 PM
 *       Revision:  none
 *       Compiler:  gcc
 *
 *         Author:  WuShuai , <imsiren@163.com>
 *           Blog:  imsiren.com
 *   Organization:  
 *
 * =====================================================================================
 */
#include <stdlib.h>
#include <pthread.h>
#include <stdio.h>
void runner(void *arg){
        pthread_t t=pthread_self();
        printf("thread id:%x\n",(unsigned int )t);
}
int main(){
        int arg=1000;
        void *ret;
        pthread_t tid[2];
        pthread_create(&tid[1],NULL,(void*)&runner,(void*)arg);
        pthread_create(&tid[2],NULL,(void*)&runner,(void*)arg);

        pthread_join(tid[1],&ret);
        pthread_join(tid[2],&ret);
        return 0;
}

编译:
gcc -g -o thread main.c -lpthread

结果:
[root@s thread]# ./thread
thread id:b6d72b70
thread id:b7773b70

原文出处:http://www.imsiren.com/archives/754