美文网首页
多线程编程

多线程编程

作者: 不合格码农 | 来源:发表于2020-08-18 15:50 被阅读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);

    相关文章

      网友评论

          本文标题:多线程编程

          本文链接:https://www.haomeiwen.com/subject/rvgcuqtx.html