【问题标题】:accessing shared variable in wait_event_timeout linux interface在wait_event_timeout linux接口中访问共享变量
【发布时间】:2013-05-23 20:59:29
【问题描述】:

wait_event_timeout 可用于让线程休眠指定时间或直到某些条件变为真。
我面临这种情况是共享变量的情况。

ret = wait_event_timeout(SLEEP_Q,shared_vaible == 1,TIME_TO_SLEEP);

在调用它之前,我必须放弃用于访问共享变量的spinlock

所以我的问题是,由于共享变量是在不使用锁的情况下读取的,因此正确性是否会受到影响?
内核是否确保wait_event 接口中的此类条件不存在竞争条件?

【问题讨论】:

    标签: linux linux-kernel race-condition kernel


    【解决方案1】:

    如果变量足够小,可以自动更新,并且所有更新确实都是自动发生的(例如ACCESS_ONCE(shared_variable) = 1;),那么您可以使用问题中的代码。

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

    ret = wait_event_timeout(SLEEP_Q, read_shared_variable() == 1, TIME_TO_SLEEP);
    

    【讨论】:

      猜你喜欢
      • 2021-08-12
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      相关资源
      最近更新 更多