最近遇到2个线程锁的问题:记录如下
1)线程锁初始化的方式: 线程初始化,可以有2中方式,a,直接赋初值初始化;b,使用 pthread_mutex();
方式1:unsigned int g_deviceManage.mutex = STATE_INVALID;
方式2:pthread_mutes_init(g_deviceManage.mutex);
2)死锁问题:在一个函数func( )中,已经获取到锁,但在子函数func_a( )中,却又对全局变量进行加锁,解锁处理;后面func( )中解锁,这样就造成了死锁,即func( ) 中已获取到锁,所以在func_a( ) 中永远得不到锁,这样程序就阻塞挂死了;
比如:
void func_a(void)
{
pthread_mutex_lock(g_deviceManage.mutex);
unsigned int state = g_deviceManage.state;
pthread_mutex_unlock(g_deviceManage.mutex);
}
func(void)
{
pthread_mutex_lock(g_deviceManage.mutex);
......
......
func_a();
pthread_mutex_unlock(g_deviceManage.mutex);
}