// unlock of pred can see me in the tail before I fill next
// publish me to previous lock-holder :
- // FIXME: detection miss, don't think it's necessary
+ // FIXME: detection miss, execution never ends
+ // If this is relaxed, the store 0 to gate will be read before and
+ // that lock will never ends.
pred->next.store(me, std::mo_release );
- printf("lock_miss1\n");
+ //printf("lock_miss1\n");
// (*2) pred not touched any more
int my_gate = 1;
while (my_gate ) {
my_gate = me->gate.load(std::mo_acquire);
- if (my_gate == 0)
- printf("lock at gate!\n");
+ //if (my_gate == 0)
+ //printf("lock at gate!\n");
/**
@Begin
@Commit_point_define_check: my_gate == 0
void unlock(guard * I) {
mcs_node * me = &(I->m_node);
- // FIXME: detection miss, don't think it's necessary
+ // FIXME: detection miss, execution never ends
mcs_node * next = me->next.load(std::mo_acquire);
- printf("unlock_miss2\n");
+ //printf("unlock_miss2\n");
if ( next == NULL )
{
mcs_node * tail_was_me = me;
// (*1) catch the race :
rl::linear_backoff bo;
for(;;) {
- // FIXME: detection miss, don't think it's necessary
+ // FIXME: detection miss, execution never ends
next = me->next.load(std::mo_acquire);
- printf("unlock_miss3\n");
+ //printf("unlock_miss3\n");
if ( next != NULL )
break;
thrd_yield();