[PATCH][BZ #13065] New pthread_barrier algorithm to fulfill barrier destruction requirements.
Paul E. Murphy
murphyp@linux.vnet.ibm.com
Fri Dec 18 23:47:00 GMT 2015
On 12/18/2015 10:42 AM, Torvald Riegel wrote:
> On Sun, 2015-07-19 at 23:52 +0200, Torvald Riegel wrote:
>> The previous barrier implementation did not fulfill the POSIX
>> requirements for when a barrier can be destroyed. Specifically, it was
>> possible that threads that haven't noticed yet that their round is
>> complete still access the barrier's memory, and that those accesses can
>> happen after the barrier has been legally destroyed.
>> The new algorithm does not have this issue, and it avoids using a lock
>> internally.
>>
> Ping. Attached is a rebased patch.
+ We count the number of threads that have entered (IN). Each thread
+ increments IN when entering, thus getting a position in the sequence of
+ threads that are or have been waiting (starting with 1, so we the position
+ is the number of threads that have entered so far including the current
+ thread).
s/so we the position/the position/ ?
+ adding COUNT to CURRENT_ROUND atomically. Threads that belief that their
+ round is not complete yet wait until CURRENT_ROUND is not smaller than
+ their position anymore.
s/belief/believe/
+ if (i <= cr)
+ goto ready_to_leave;
+ else
+ break;
Is the else here only hit if the number of participating threads is
greater than the barrier count?
Otherwise, it looks good to me, and seems like a good improvement to
have. Though, a more experienced reviewer may have more to say. This
is a bit more complicated than its predecessor. I'll test it on PPC
next week.
Paul
More information about the Libc-alpha
mailing list