Создание оболочки для атомных блоков в Java - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь реализовать STM API в Java с использованием TL2. Я написал функции более низкого уровня, такие как ReadTx и WriteTx, но не смог преобразовать их в конструкции более высокого уровня, используя такие ключевые слова, как atomic. Например, моя текущая реализация работает для первого фрагмента кода, но, поскольку он громоздок, я хочу преобразовать его во второй.

  void PushLeft(DQueue *q, int val) {
    QNode *qn = malloc(sizeof(QNode));
    qn->val = val;
    do {
      StartTx();
      QNode *leftSentinel = ReadTx(&(q->left));
      QNode *oldLeftNode = ReadTx(&(leftSentinel->right));
      WriteTx(&(qn->left), leftSentinel);
      WriteTx(&(qn->right), oldLeftNode);
      WriteTx(&(leftSentinel->right), qn);
      WriteTx(&(oldLeftNode->left), qn);
    } while (!CommitTx());
  }

void PushLeft(DQueue *q, int val) {
    QNode *qn = malloc(sizeof(QNode));
    qn->val = val;
    atomic {
      QNode *leftSentinel = q->left;
      QNode *oldLeftNode = leftSentinel->right;
      qn->left = leftSentinel;
      qn->right = oldLeftNode;
      leftSentinel->right = qn;
      oldLeftNode->left = qn;
 } }

Как это сделать без изменения синтаксиса языка?

...