4 writes to m_first
mscorlib (4)
system\threading\Tasks\ProducerConsumerQueues.cs (4)
221segment.m_state.m_first = (first + 1) & (array.Length - 1); 261segment.m_state.m_first = (first + 1) & (segment.m_array.Length - 1); 338segment.m_state.m_first = (first + 1) & (array.Length - 1); 387segment.m_state.m_first = (first + 1) & (segment.m_array.Length - 1);
16 references to m_first
mscorlib (16)
system\threading\Tasks\ProducerConsumerQueues.cs (16)
182if (segment.m_state.m_firstCopy != segment.m_state.m_first) 184segment.m_state.m_firstCopy = segment.m_state.m_first; 214int first = segment.m_state.m_first; // local copy to avoid multiple volatile reads 244if (segment.m_next != null && segment.m_state.m_first == segment.m_state.m_last) 251var first = segment.m_state.m_first; // local copy to avoid extraneous volatile reads 274int first = segment.m_state.m_first; // local copy to avoid multiple volatile reads 302if (segment.m_next != null && segment.m_state.m_first == segment.m_state.m_last) 309var first = segment.m_state.m_first; // local copy to avoid extraneous volatile reads 329int first = segment.m_state.m_first; // local copy to avoid multiple volatile reads 368if (segment.m_next != null && segment.m_state.m_first == segment.m_state.m_last) 375var first = segment.m_state.m_first; // local copy to avoid extraneous volatile reads 412if (head.m_state.m_first != head.m_state.m_lastCopy) return false; // m_first is volatile, so the read of m_lastCopy cannot get reordered 413if (head.m_state.m_first != head.m_state.m_last) return false; 424for (int pt = segment.m_state.m_first; 449first = segment.m_state.m_first; 451if (first == segment.m_state.m_first) break;