pthread常用函数说明

原创 2012年03月29日 13:44:00

1.1  pthread_create()

1.1.1 函数原型

#include <pthread.h>

int pthread_create(pthread_t *restrict tidp,
               const pthread_attr_t *restrict attr,
               void *(*start_rtn)(void),
               void *restrict arg);

Returns: 0 if OK, error number on failure

1.1.2 函数功能

linux下用C开发多线程程序,多线程遵循POSIX线程接口,称为pthread该函数的功能是创建一个线程。

1.1.3 传入参数

pthread_t *restrict tidp,由tidp指向的内存单元被设置为新创建线程的线程IDrestrictc99标准引入的,由 restrict 修饰的指针是最初唯一对指针所指向的对象进行存取的方法,即它告诉编译器,所有修改该指针所指向内存中内容的操作都必须通过该指针来修改,而不能通过其它途径(其它变量或指针)来修改,更好的优化代码

const pthread_attr_t *restrict attr,第二个参数用来设置线程属性。

void *(*start_rtn)(void),第三个参数是一个函数指针,即线程运行函数的起始地址。新创建的线程从start_rtn函数的地址开始运行,该函数只有一个万能指针参数arg,如果需要向start_rtn函数传递的参数不止一个,那么需要把这些参数放到一个结构中,然后把这个结构的地址作为arg的参数传入。

void *restrict arg),最后一个参数是运行函数的参数。

1.1.4 返回值

若成功则返回0,否则返回出错编号

1.2 pthread_join()

1.2.1 函数原型

#include <pthread.h>

int pthread_join(pthread_t thread, 

              void **retval); 

Returns: 0 if OK, error number on failure

1.2.2 函数功能

一般情况下,进程中各个线程的运行都是相互独立的,线程的终止并不会通知,也不会影响其他线程,终止的线程所占用的资源也并不会随着线程的终止而得到释放。正如进程之间可以用wait()系统调用来同步终止并释放资源一样,线程之间也有类似机制,那就是pthread_join()函数。

这个函数是一个线程阻塞的函数,调用它的线程将一直等待到被等待的线程结束为止,当函数返回时,被等待线程的资源被收回。一个线程的结束有两种途径,一种是象我们上面的例子一样,函数结束了,调用它的线程也就结束了;另一种方式是通过函数pthread_exit来实现pthread_exitpthread_join的区别在于:使用 pthread_exit() 函数,则仅仅是主线程消亡,进程却不会结束,进程内的其他线程也不会终止,知道所有线程结束,进程才会结束。

1.2.3 传入参数

pthread_t thread, 为被等待的线程标识符,

void **retval为一个用户定义的指针,它可以用来存储被等待线程的返回值。

1.2.4 返回值

若成功则返回0,否则返回出错编号


3.1  具体实例


/*
 * thread_creat.c
 *
 *  Created on: 2012-3-28
 *      Author: dell
 */


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

/*要传递给线程函数的参数*/
struct char_print_parms
{
    char character;    /*要打印的字符*/
    int count;    /*打印字符的次数*/
};

void *char_print (void *parameters)
{
    struct char_print_parms *p = (struct char_print_parms*) parameters;
    int i;

    for(i = 0; i < p->count; i++)
        fputc(p->character, stderr);
    return NULL;
}


int main()
{
    pthread_t pthread1_id;
    pthread_t pthread2_id;

    struct char_print_parms thread1_args;
    struct char_print_parms thread2_args;

    thread1_args.character = 'x';
    thread1_args.count = 30000;
    pthread_create(&pthread1_id, NULL, &char_print, &thread1_args);

    thread1_args.character = 'o';
    thread1_args.count = 20000;
    pthread_create(&pthread2_id, NULL, &char_print, &thread2_args);

    //sleep(1);
    printf("hello world\n");

    pthread_join(pthread1_id,NULL);
    pthread_join(pthread2_id,NULL);
   // pthread_exit(NULL);

    return 0;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

pthread常用API及简单介绍

经过了上篇文档的初步学习,对pthread有了一个简单的感性认识,但是对pthread的认识还是比较少,在这篇文档当中将要主要学习pthread的一些常用的API。   首先是pthrea...

关于pthread里面一些函数的使用心得!

第一次使用pthread,遇到的问题还真不少,现在我一一记录一下:    1.关于编译时出现 对‘pthread_create’未定义的引用 之类的错误的解决:由于pthread库不是Linux系统默...

多进程编程函数posix_spawn实例

posix_spawn将可执行文件直接吊起,生成一个进程;该示例二中其实有三个进程在运行;main, ls , cat

pthread_create传递参数

#include #include using namespace std; pthread_t thread; void *fn(void *arg) {     int...

pthread_create函数的详细讲解(包括向线程函数传递参数详解)

pthread_create是UNIX环境创建线程函数 头文件   #include 函数声明   int pthread_create(pthread_t*restrict ti...

linux中线程相关函数

linux中线程相关函数2010年03月09日 星期二 22:181. 比较两个线程 ID 是否一致。   线程ID 使用 pthread_t 数据类型来表示。Linux 使用 unsigned lo...

pthread_cond_wait()函数说明

1. 首先pthread_cond_wait 的定义是这样的 The pthread_cond_wait() and pthread_cond_timedwait() functions are u...

pthread线程编程常用API

#include #include #include pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;/*初始化互斥锁*/ p...

线程 pthread_create Linux函数 线程创建

线程:是在某个进程中被创建的,而它达到生命周期都在这个进程中。 线程它允许一个进程执行一个或多个执行路径(即1个进程可以有多个线程,来执行不同的程序),这些执行路径由系统异步调度。 进程有自己的数...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)