多线程编程

2020-08-18  本文已影响0人  不合格码农

原型:   

        #include    <pthread.h>

        int pthread_eaual(pthread_t tid1,pthread_t tid2);  //判断两个线程ID是否相等

                                                                                         相等返回非0,不相等返回0.

        #include    <pthread.h>

        pthread_t pthread_self(void);                                //获取自身线程ID

        线程创建

        #include    <pthread.h>

        int    pthread_creat(pthread_t *restrict tidp,    const pthread_attr_t *attr,    void*(*start_rtn)(void),    void    *restrict arg);        //创建线程

                                                                                                                                                                                   成功返回0,否则返回错误编号

        tidp:指向的内存单元被设置为新创建的现成的线程ID

        attr:用于定制线程的线程属性,设置为NULL时,则使用默认属性。

        新创建的函数从strat_rtn函数的地址开始运行,该函数只有一个无类型指针参数arg. 若想向strat_rtn传递不止一个参数,可以将多个参数放在一个结构体中,然后把结构体的地址作为arg参数传入。


        线程终止

                如果进程中的任一线程调用了exit, _Exit或_exit,则整个进程会终止。同样,如果信号的默认动作是终止进程,那么,把信号发送到进程会终止整个进程。

                单个进程的退出方式有三种:

                1.线程只是从启动的例程中退出,返回值是线程的终止码。    

                2.线程可以被统一进程中的其他线程取消。

                3.线程调用 pthread_exit;

            #include    <pthread.h>

            void    pthread_join(pthread_t    thread, void    **rval_ptr);        //成功返回0,否则返回错误编号。

            pthread_join()函数,以阻塞的方式等待thread指定的线程调用pthread_exit、重新启动例程中返回

            如果线程已经结束,那么该函数会立即返回。并且thread指定的线程必须是joinable的。

            thread: 线程标识符,即线程ID,标识唯一线程。rval_ptr: 用户定义的指针,用来存储被等待线程的返回值。

            如果线程是从启动例程中返回,

            rval_ptr将包含返回码,如果线程被取消,由rval_ptr指向的内存单元被置为PTHREAD_CANCELED。

 

        线程同步

                线程同步机制包括互斥读写锁以及条件变量

        互斥

                可以把互斥变量之置为常量PTHREAD_MUTEX_INITIALIZER(针对静态分配的互斥量),或调用pthread_mutex_init函数进行初始化。如果动态的分配互斥量(如调用malloc函数),那么在释放内存前需要调用pthread_mutex_destory。

                #include    <pthread.h>

                int pthread_mutex_init(pthread_mutex_t    *restrict mutex,    const    pthread_mutexattr_t    *restrict    attr);

                int    pthread_mutex_destory(pthread_mutex_t    mutex);

                int     pthread_mutex_lock(pthread_mutex_t *mutex);

上一篇下一篇

猜你喜欢

热点阅读