最近一段时间学习了很多关于多线程的东西,同时项目中也多是此类东西,因此记录一下
1.多线程的问题在于同步,主要是各个线程的时间片分配,不能总是给一个线程cpu时间,让其他线程没有cpu可用
2.多线程同步有很多种方法,目前工作中用到的多是互斥锁,读写锁,条件变量等。
3.各种方法的解释:
互斥锁:互斥锁的理解很简单,就是当我用了这把锁之后,在我把锁释放之前,都不能够给别人用。
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
其中mutex既可以动态创建也可以静态创建。
在加锁和解锁之间操作要变更的变量。
读写锁的理解和互斥锁基本一致,但是读写锁的区别在于:只能操作其中的读或者写。
条件变量:条件变量就是用来等待条件信号成立,然后可以继续向下运行。相对于互斥锁更为灵活。
int pthread_cond_wait(pthread_cond_t* cond, pthrad_condattr_t* cord_attr);该函数等待cond信号。
int pthread_cond_signal(pthread_cond_t* cond);
int pthread_cond_broadcast(pthread_cond_t* cond);
下面两个函数返回cond信号,不过singal只是按顺序释放需要cond的函数,而broadcast释放所有的函数。
当然还有自旋锁,还在学习中,暂时用到的不到,最近看内核的时候发现里面有用到。