Example #1
0
grt_bool_t hashtable_insert(grt_word_t val) {
  unsigned bucket = compute_hash(val);
  node_t *p, *q;
  stm_start();
  grt_word_t *loc = (grt_word_t*) &table[bucket];
  stm_open_for_read(table_proc, loc);
  stm_read(table_proc, loc, (grt_word_t*) &p);
  if (find_node_stm(val, p)) {
    stm_commit();
    return GRT_TRUE;
  }
  q = (node_t*) stm_alloc(table_proc, sizeof(node_t));
  loc = (grt_word_t*) &q->next;
  stm_open_for_write(table_proc, loc);
  stm_write(table_proc, (grt_word_t) p, loc);
  loc = (grt_word_t*) &q->val;
  stm_open_for_write(table_proc, loc);
  stm_write(table_proc, val, loc);
  loc = (grt_word_t*) &table[bucket];
  stm_open_for_write(table_proc, loc);
  stm_write(table_proc, (grt_word_t) q, loc);
  stm_commit();
  return GRT_FALSE;
}
Example #2
0
/*
 * Called by the CURRENT thread to store part of a word-sized value.
 */
void stm_store2(TXPARAMS volatile stm_word_t *addr, stm_word_t value, stm_word_t mask)
{
  TX_GET;

  stm_write(tx, addr, value, mask);
}
Example #3
0
/*
 * Called by the CURRENT thread to store a word-sized value.
 */
void stm_store(TXPARAMS volatile stm_word_t *addr, stm_word_t value)
{
  TX_GET;

  stm_write(tx, addr, value, ~(stm_word_t)0);
}