小编Bal*_*cis的帖子

字节操作在C++ 11中是原子的吗?

那么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)

谢谢!

multithreading atomic c++11

3
推荐指数
1
解决办法
140
查看次数

我可以在线程A中使用EnterCriticalSection(s),然后在线程B中使用LeaveCriticalSection(s)吗?

所以我有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.为什么?

c++ windows c++11

0
推荐指数
1
解决办法
429
查看次数

标签 统计

c++11 ×2

atomic ×1

c++ ×1

multithreading ×1

windows ×1