Барьеры памяти в зарегистрированном IO

Я использую RIO + IOCP + MultiThreads + TCP.

Имеете ли RIODequeueCompletion() функция сделать барьер памяти (приобретение или полный забор) и RIOSend / RIOReceive функции сделать барьер памяти (разъединение или полным забор)?

Нужно ли мне создавать барьер памяти ( захват ) после вызова RIODequeueCompletion(), чтобы увидеть свежие полученные данные в буфере RIO?

И второй вопрос: - у меня есть структурное соединение с полем packet_cnt.

      struct connection
{
  int packet_cnt = 0;
  ....
}

connection *conn = new connection[ХХХ];//One instance by one TCP connection.

In Thread A:
conn[0].packet_cnt += 5;
//is need release barrier or RIOSend/RIOReceive does it?
put &conn[0] into RIOSend/RIOReceive functions (in RequestContext param)

Thread B catched a completions RIOSend/RIOReceive from Thread A, with conn[0] instance by calling RIODequeueCompletion(). 
//is need acquire barrier or RIODequeueCompletion() does it?
conn[0].packet_cnt == 5 ???

0 ответов

Другие вопросы по тегам