Exemplo n.º 1
0
int
set_add(intset_t *set, skey_t key, skey_t val)
{
  int result;
#ifdef DEBUG_PRINT
  printf("++> set_add(%d)\n", (int)val);
  IO_FLUSH;
#endif
#ifdef SEQUENTIAL /* Unprotected */
  result = set_seq_add(set, key, val);
#elif defined LOCKFREE
  result = harris_insert(set, key, val);
#endif
  return result;
}
Exemplo n.º 2
0
int set_add(intset_t *set, val_t val, int transactional)
{
	int result = 0;
	
#ifdef DEBUG
	printf("++> set_add(%d)\n", (int)val);
	IO_FLUSH;
#endif

	if (!transactional) {
		
		result = set_seq_add(set, val);
		
	} else { 
	
#ifdef SEQUENTIAL /* Unprotected */
		
		result = set_seq_add(set, val);
		
#elif defined STM
	
		node_t *prev, *next;
		val_t v;	
		TX_START(EL);
		prev = set->head;
		next = (node_t *)TX_LOAD(&prev->next);
		while (1) {
			v = TX_LOAD((uintptr_t *) &next->val);
			if (v >= val)
				break;
			prev = next;
			next = (node_t *)TX_LOAD(&prev->next);
		}
		result = (v != val);
		if (result) {
			TX_STORE(&prev->next, new_node(val, next, transactional));
		}
		TX_END;

#elif defined LOCKFREE
		result = harris_insert(set, val);
#endif
		
	}
	
	return result;
}
Exemplo n.º 3
0
int set_add(intset_t *set, skey_t key, skey_t val) {
    int result;

    result = harris_insert(set, key, val);
    return result;
}