那么char上的操作是原子的吗?所以在线程AI中读取char T并在线程BI中写入相同的char T,这些标准操作是原子的吗?
char a;
#thread A
{
if(a & 0x01)
...
}
#thread B
{
a =0x01;
...
}
# ATOMIC?
Run Code Online (Sandbox Code Playgroud)
谢谢!
所以我有SEND_SLOT结构:
struct SEND_SLOT
{
SEND_BUFFER buffer;
uint16 index;
CRITICAL_SECTION slotLock;
};
Run Code Online (Sandbox Code Playgroud)
和连接结构:
struct connexion
{
...
SEND_SLOT sendSlots[3];
...
}
Run Code Online (Sandbox Code Playgroud)
在线程A我做:
if(TryEnterCriticalSection(&sendSlots[i]))
{ //Post send request...
WSASend(...);
}
Run Code Online (Sandbox Code Playgroud)
在线程B我做:
while(...)
{
...
//request finished, data sent, and i get the index to the SEND_SLOT
LeaveCriticalSection(&sendSlots[index]);
...
}
Run Code Online (Sandbox Code Playgroud)
所以我试图在线程A中锁定SEND_SLOT i,后来我想解锁它,可能是从其他线程解锁,但是它不起作用,每次我尝试发布新发送它锁定第一个插槽,即使它已经哈希已被锁定且未发出LeaveCriticalSection.为什么?