多线程:
* 头文件 <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,这样可以防止太快被改变了。