linuxC多线程:帮我记住

来源:互联网 发布:淘宝文艺店铺推荐 知乎 编辑:程序博客网 时间:2024/05/01 08:10

多线程:

* 头文件 <pthread.h> , 链接库  -lpthread  , pthread_t 类型   pthread_attr_t 属性类型

* 3个常用函数:

    int pthread_create(标识符,属性NULL,函数void* (*fun)(void*) , (void* ) 参数指针);  // 创建一个线程

    void pthread_exit(void* retval); 这个返回的东东可以被pthread_join()第二个参数接收啊;  //线程退出,并且返回一个任意类型的东东的指针哦。

    int pthread_join( pthread_t th, void ** thread_return ) ;    //等待那个线程结束

 

注意:我们常用sleep来达到代码演示效果,也可以用while( i < 30 ) 来达到演示效果。

插入代码:420页

-------------------------------------------------------------------------

线程同步:信号量(有限制个数的访问的控制)、互斥量(单个访问的控制)

一。信号量:二进制信号量,计数信号量

 *以sem_ 开头,4个基本函数    ,   * <semaphore.h>  sem_t  

* int seminit(sem_t &sem, int pshared , unsigned int value);   第二个参数:共享状态,设置为0表示局部,非0表示进程间共享, 第三个参数:初始化信号量的值:比如0

*int sem_wait( sem_t * sem ) ;  //以原子方式 -1

*int sem_post( sem_t * sem);     //   sem_trywait(sem_t * sem);   以原子方式 +1

*int sem_destroy(sem_t * sem) ; //企图清理一个正在被线程等待的信号量,会收到一个错误。

****信号量变量应该做为全局变量哦。记得哦,因为他要用在多个线程函数中,所以必须全局变量。

*****技巧在于: 信号量为0 的时候,调用wait() 会等待哦   + while()的配合 + sleep() 的配合。

插入代码:424页

-------------------------------------------------------------------------

二。互斥量:  在临界区前加锁,后 解锁。  对一个加锁了的互斥量再加锁,会等待其解锁哦。(即阻塞)

* 与信号量的函数相似哦。    <pthread.h>   也有4个基本函数:   pthread_mutex_t  , 注意:和线程使用的是同一个头文件。

*int pthread_mutex_init ( pthread_mutex_t &mutex, const pthread_mutexattr_t *xxx) ; 属性先设置为NULL也可以的撒。

*int pthread_mutex_lock ( pthread_mutex_t *mutex);

*int pthread_mutex_unlock( pthread_mutex_t *mutex);

*int pthread_mutex_destroy( pthread_mutex_t * mutex);

插入代码:429页(linux 程序设计第4版)

---------------------------------------------------

线程属性:各种状态,设置各种调度方式。

线程取消:int pthread_cencel()  , 线程也可以设置自己的 取消状态,来防止或者响应别的线程发送过来的取消消息。

多线程:要防止太快,有必要时以局部接收一份copy,这样可以防止太快被改变了。

 

 

 

 

 

 

原创粉丝点击