Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 在同一延迟工作函数上运行的工作线程是否会遇到争用条件?_Multithreading_Linux Kernel_Synchronization_Driver - Fatal编程技术网

Multithreading 在同一延迟工作函数上运行的工作线程是否会遇到争用条件?

Multithreading 在同一延迟工作函数上运行的工作线程是否会遇到争用条件?,multithreading,linux-kernel,synchronization,driver,Multithreading,Linux Kernel,Synchronization,Driver,我使用工作队列来处理设备的异步传入信号。以下是我到目前为止的高级代码: static void func1(…){ //使用“数据->信号”适当处理信号的代码 } //@数据指针是全局的 静态无效延迟工作(…){ 如果(sig1) 数据->sig=sig1; 如果(sig2) 数据->sig=sig2; 初始工作(wq1,func1); 排队工作(wq、wq1); } 可以连续快速发送多个信号,并且多个工作线程可以同时在工作队列中排队。但是,当worker-thread1运行“func1”来处

我使用工作队列来处理设备的异步传入信号。以下是我到目前为止的高级代码:

static void func1(…){
//使用“数据->信号”适当处理信号的代码
}
//@数据指针是全局的
静态无效延迟工作(…){
如果(sig1)
数据->sig=sig1;
如果(sig2)
数据->sig=sig2;
初始工作(wq1,func1);
排队工作(wq、wq1);
}
可以连续快速发送多个信号,并且多个工作线程可以同时在工作队列中排队。但是,当worker-thread1运行“func1”来处理“sig1”时,调度程序是否可以将其上下文切换到睡眠状态,然后worker-thread2在同一个函数中处理“sig2”?可能导致func1中的比赛条件?或者工作线程将以原子方式运行,而不让同一工作队列中的下一个工作线程中断它


它所在的系统是一台多核机器。

所有系统工作队列都可以同时处理多个工作项。如果您创建自己的工作队列,可以使用
alloc\u ordered\u workqueue
创建它,使其一次处理一个工作项。(还有
create\u singlethread\u workqueue
,但
create\u…\u workqueue
接口不推荐使用。)使用
destroy\u workqueue
安全地销毁工作队列。