set_task_state和set_current_state
2017-03-07 00:27
806 查看
set_task_state和set_current_state
宏定义
#define mb() __asm__ __volatile__ ("" ::: "memory") #define set_task_state(tsk, state_value) \ set_mb((tsk)->state, (state_value)) #define set_current_state(state_value) set_mb(current->state, (state_value))
set_task_state用于指定进程的状态,set_current_state用于指定当前进程的状态,mb宏会确保编译程序时,编译器/CPU控制单元不会把其指令缩水执行(确保本条指令不会因编译器的优化而省略,且要求每次直接读值),保证程序状态即使在乱序条件下依然能够正确赋值。
相关对比
__set_current_state和__set_task_state
#define __set_task_state(tsk, state_value) \ do { (tsk)->state = (state_value); } while (0) #define __set_current_state(state_value) \ do { current->state = (state_value); } while (0)
虽然这个执行快,但是如果进程状态会在同一时间有可能会被多个线程修改,那么很有可能会出现问题(譬如多个线程多次赋值执行先后顺序发生变化),但是用set_task_state和set_current_state可以保证不会出现其指令就算在乱序情况下,这几个指令的最终执行顺序不会发生变化。
相关文章推荐
- set_current_state
- kernel---set_task_state(task,state)的研究『有关内存屏障问题』
- set_task_state()与__set_task_state()的区别
- set_current_state 应用
- set_current_state 应用
- set_current_state 应用
- set_task_state()与__set_task_state()的区别
- set_current_state 应用
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection
- 2010-04-20 18:17 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters
- setlocale - set the current locale
- 如何用BeginInvoke方法解决SetCurrentCellAddressCore 异常
- 关于 error: Operation is not valid due to the current state of the object。
- JBPM4中 state 和 task 的不同
- 1. MaxCounters 计数器 Calculate the values of counters after applying all alternating operations: increase counter by 1; set value of all counters to current maximum.
- vs2005下出现“Session state can only be used when enableSessionState is set to true, either in a configuration file or in the Page directive”的解决方法
- ControlSet001、ControlSet002以及CurrentControlSet
- Git暂存代码出现unable to auto detect email address '',Cannot save the current index state
- WinAPI: SetCurrentDirectory、GetCurrentDirectory - 设置与获取当前目录
- php---魔术方法(__tostring(),__set_state())