在等待\事件\超时linux接口中访问共享变量

在等待\事件\超时linux接口中访问共享变量,linux,linux-kernel,race-condition,kernel,Linux,Linux Kernel,Race Condition,Kernel,wait\u event\u timeout可用于使线程在指定时间内处于休眠状态,或直到某些条件变为真。 我面临的情况是,这种情况是一个共享变量 ret = wait_event_timeout(SLEEP_Q,shared_vaible == 1,TIME_TO_SLEEP); 在调用此函数之前,我必须放弃用于访问共享变量的自旋锁 ret = wait_event_timeout(SLEEP_Q,shared_vaible == 1,TIME_TO_SLEEP); 所以我的问题是,由于读取

wait\u event\u timeout
可用于使线程在指定时间内处于休眠状态,或直到某些条件变为真。
我面临的情况是,这种情况是一个共享变量

ret = wait_event_timeout(SLEEP_Q,shared_vaible == 1,TIME_TO_SLEEP);
在调用此函数之前,我必须放弃用于访问共享变量的
自旋锁

ret = wait_event_timeout(SLEEP_Q,shared_vaible == 1,TIME_TO_SLEEP);
所以我的问题是,由于读取共享变量时不使用锁,正确性是否会受到影响?

内核是否确保
wait\u event
接口中的此类条件不具有竞争条件?

如果变量足够小,可以对其进行原子更新,并且如果所有更新确实以原子方式进行(使用类似
ACCESS\u ONCE(shared\u variable)=1;
),则可以使用问题中的代码

否则,您必须在读取变量时获得锁。 最好的方法是创建一个简单的助手函数:

ret=wait\u event\u timeout(SLEEP\u Q,read\u shared\u variable()==1,TIME\u TO\u SLEEP);