LINUX下C编程的疑问,该如何解决
LINUX下C编程的疑问
1,在LINUX下多线程编程中,如果对资源还没加锁就解锁,会不会出现问题?
2,加锁之后,有没有可能出现解锁不成功的可能,如果可能是为什么?怎么解决?
------解决方案--------------------
应该是线程死掉,不过具体情况可能会复杂
------解决方案--------------------
1,在LINUX下多线程编程中,如果对资源还没加锁就解锁,会不会出现问题?
不会(首先你的mutex是0,1型),但需要注意mutex需初始化。
2,加锁之后,有没有可能出现解锁不成功的可能,如果可能是为什么?怎么解决?
不会(首先你的mutex是0,1型),但需要注意死锁的情况。
如果下面的code中thread A 和B都刚好执行到0002行时就会产生死锁。
ThreadA
{
0001 lock mutex_a;
0002 ...
0003 lock mutex_b;
0004 ...
0005 unlock mutex_b;
0006 ...
0007 unlock mutex_a;
}
ThreadB
{
0001 lock mutex_b;
0002 ...
0003 lock mutex_a;
0004 ...
0005 unlock mutex_a;
0006 ...
0007 unlock mutext_b;
}
1,在LINUX下多线程编程中,如果对资源还没加锁就解锁,会不会出现问题?
2,加锁之后,有没有可能出现解锁不成功的可能,如果可能是为什么?怎么解决?
------解决方案--------------------
应该是线程死掉,不过具体情况可能会复杂
------解决方案--------------------
1,在LINUX下多线程编程中,如果对资源还没加锁就解锁,会不会出现问题?
不会(首先你的mutex是0,1型),但需要注意mutex需初始化。
2,加锁之后,有没有可能出现解锁不成功的可能,如果可能是为什么?怎么解决?
不会(首先你的mutex是0,1型),但需要注意死锁的情况。
如果下面的code中thread A 和B都刚好执行到0002行时就会产生死锁。
ThreadA
{
0001 lock mutex_a;
0002 ...
0003 lock mutex_b;
0004 ...
0005 unlock mutex_b;
0006 ...
0007 unlock mutex_a;
}
ThreadB
{
0001 lock mutex_b;
0002 ...
0003 lock mutex_a;
0004 ...
0005 unlock mutex_a;
0006 ...
0007 unlock mutext_b;
}