内联函数是原子的吗?

res*_*way 2 c++ linux inline atomicity

如果有两个线程调用此问题,那么我可以解决以下代码中解锁后的linux上下文切换问题

inline bool CMyAutoLock::Lock(
    pthread_mutex_t *pLock,
    bool bBlockOk 
)
throw ()
{
    Unlock();
    if (pLock == NULL)
        return (false);
// **** can context switch happen here ? ****///
    return ((((bBlockOk)? pthread_mutex_lock(pLock) :
        pthread_mutex_trylock(pLock)) == 0)? (m_pLock = pLock, true) : false);
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*lau 6

不,这不是原子的.

实际上,在解锁互斥锁后,特别有可能发生上下文切换,因为操作系统知道该互斥锁是否阻塞了另一个线程.(另一方面,操作系统甚至不知道您是否正在执行内联函数.)