linux多线程问题请教
有1对线程,其中一个(线程1)负责视频采集(每秒25帧,由select负责管理读取数据),另外一个(线程2)负责处理报警信息,当确认报警信号时将另外一个线程采集的视频存储处理;要求在没有报警的时候采集视频线程不停的采集(不存储,在内存中实时更新),保证报警来时存储的视频是报警时刻视频;
问题来了:线程2接收到有效报警时如何告知线程1停止视频采集转而到存储处理呢?如果通过mutex加锁利用全局变量传递的话则线程1的while循环在select之前会不停的加锁解锁查看线程2处理的变量,这样效率是不是太低了?关键我的程序里有4对这样的线程,如果利用这种方法感觉不好,请问有什么好的方法吗?
[解决办法]
假设信号量mutex,报警标志位alarm
线程1 :
while(1)
{
lock(mutex)
if(1==alarm)
{
存储操作
alarm = 0
}
unlock(mutex)
视频采集操作
}
线程2:
lock(mutex)
alarm = 1
unlock(mutex)
如果,线程2触发比较频繁,线程1的临界区可以使用变量替换,把存储操作提取出来
[解决办法]
条件变量可以挂起, 另外不要杞人忧天, 加锁不代表没有效率, 先试过再说.
[解决办法]