Барьеры памяти в зарегистрированном 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 ???