Кто-либо попробовал транзакционную память за C++?

В Java все переменные, которые вы объявляете, на самом деле являются «ссылками» на объекты (или примитивы), а не самими объектами.

При попытке выполнить один метод объекта , ссылка просит живой объект выполнить этот метод. Но если ссылка ссылается на NULL (ничего, нуль, void, nada), то нет способа, которым метод будет выполнен. Тогда runtime сообщит вам об этом, выбросив исключение NullPointerException.

Ваша ссылка «указывает» на нуль, таким образом, «Null -> Pointer».

Объект живет в памяти виртуальной машины пространство и единственный способ доступа к нему - использовать ссылки this. Возьмем этот пример:

public class Some {
    private int id;
    public int getId(){
        return this.id;
    }
    public setId( int newId ) {
        this.id = newId;
    }
}

И в другом месте вашего кода:

Some reference = new Some();    // Point to a new object of type Some()
Some otherReference = null;     // Initiallly this points to NULL

reference.setId( 1 );           // Execute setId method, now private var id is 1

System.out.println( reference.getId() ); // Prints 1 to the console

otherReference = reference      // Now they both point to the only object.

reference = null;               // "reference" now point to null.

// But "otherReference" still point to the "real" object so this print 1 too...
System.out.println( otherReference.getId() );

// Guess what will happen
System.out.println( reference.getId() ); // :S Throws NullPointerException because "reference" is pointing to NULL remember...

Это важно знать - когда больше нет ссылок на объект (в пример выше, когда reference и otherReference оба указывают на null), тогда объект «недоступен». Мы не можем работать с ним, поэтому этот объект готов к сбору мусора, и в какой-то момент VM освободит память, используемую этим объектом, и выделит другую.

10
задан Mark Biek 17 September 2008 в 12:22
поделиться

4 ответа

Я не использовал компилятор Intel, однако, у Herb Sutter были некоторые интересные комментарии к нему...

От Sutter говорит: будущее параллелизма

Вы видите большой интерес в и использование транзакционной памяти, или действительно ли понятие является слишком трудным для большинства разработчиков для схватывания?

Еще не возможно ответить, кто использует его, потому что это еще не было поставлено на рынок. Intel имеет программное обеспечение транзакционный прототип компилятора памяти. Но если вопрос, "Это слишком трудно, чтобы разработчики использовали?" ответ - то, что я, конечно, надеюсь нет. Самое главное, это - путь, легче, чем блокировки. Это - единственная главная вещь на горизонте исследования, который дает надежду на большое сокращение нашего использования блокировок. Это никогда не будет заменять блокировки полностью, но это - наша единственная большая надежда замене их частично.

Существуют некоторые ограничения. В частности, некоторый ввод-вывод является по сути не транзакционным — Вы не можете взять атомарный блок, который предлагает пользователю его имя, и считайте имя из консоли, и просто автоматически прервите и повторите блок, если это конфликтует с другой транзакцией; пользователь может сказать различие, если Вы предлагаете ему дважды. Транзакционная память является отличной для материала, который только касается памяти, все же.

У каждого крупного аппаратного и программного поставщика, о котором я знаю, есть несколько транзакционных инструментов памяти в R&D. Существуют конференции и научные работы на теоретических ответах на основные вопросы. Мы еще не на этапе Модели T, где мы можем послать его. Вы будете, вероятно, видеть рано, ограниченные прототипы, где Вы не можете сделать неограниченной транзакционной памяти — где можно только считать и записать, скажем, 100 ячеек памяти. Это все еще очень полезно для включения большего количества свободных от блокировок алгоритмов, все же.

8
ответ дан 3 December 2019 в 22:40
поделиться

У доктора Dobb была статья о понятии в прошлом году: Транзакционное Программирование Calum Grant - http://www.ddj.com/cpp/202802978

Это включает некоторые примеры, сравнения и заключения, пользующиеся его библиотекой в качестве примера.

4
ответ дан 3 December 2019 в 22:40
поделиться

В некоторых случаях я вижу это как являющееся полезным и даже необходимым.

Однако, даже если процессор имеет специальные инструкции, которые делают этот процесс легче существуют все еще большие издержки по сравнению со взаимным исключением или семафором. В зависимости от того, как это реализовало его, может также повлиять на производительность в реальном времени (должны или остановить прерывания или препятствовать тому, чтобы они писали в Ваши общие области).

Мое ожидание состоит в том, что, если бы это было реализовано, это только было бы необходимо для частей данного пространства памяти, тем не менее, и таким образом, влияние могло быть ограничено.

- Adam

-2
ответ дан 3 December 2019 в 22:40
поделиться

Sun Microsystems объявили, что выпускают новый процессор в следующем году, под кодовым именем Rock, который имеет поддержку оборудования для транзакционной памяти. Это будет иметь некоторые ограничения, но это - хороший первый шаг, который должен помочь программистам заменить блокировки/взаимные исключения транзакциями и ожидать хорошую производительность из него.

Для интересного разговора о предмете, данном Mark Moir, одним из исследователей в Sun, работающем над Транзакционной Памятью и Rock, проверяют эту ссылку.

Для получения дополнительной информации и объявления от Sun о Скале и Транзакционной Памяти в целом, этой ссылке.

Обязательная статья в Википедии :)

Наконец, эта ссылка, в Висконсинском университете в Мадисоне, содержит библиографию большей части исследования, которое было и делается о Транзакционной Памяти, связано ли это с аппаратными средствами или связанное программное обеспечение.

1
ответ дан 3 December 2019 в 22:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: