Поток конкретной памяти с языковыми функциями - PullRequest
1 голос
/ 27 июня 2009

Существуют ли языки, которые поддерживают обработку общей памяти в одном адресном пространстве и передачу определенной памяти в другом адресном пространстве, используя языковые функции, а не через механизм, подобный вызовам функций?

process int x;
thread int y;

Ответы [ 3 ]

0 голосов
/ 27 июня 2009

ThreadStatic атрибут в C #

0 голосов
/ 28 июня 2009

C ++ 0x добавляет спецификатор хранилища «thread_local», так что в области имен (или глобальном) ваш пример будет

int x;              // normal process-wide global variable
thread_local int y; // per-thread global variable

Вы также можете использовать thread_local со статическим при объявлении членов класса или локальных переменных в функции:

class Foo {
    static thread_local int x;
};

void f() {
    static thread_local int x;
}

К сожалению, это, похоже, не одна из функций C ++ 0x, поддерживаемых Visual Studio 2010 или запланированных выпусков GCC.

0 голосов
/ 27 июня 2009

Компилятор Visual C ++ допускает последнее через нестандартное расширение __declspec(thread) - однако оно строго ограничено, поскольку не поддерживается в динамически загружаемых DLL.

Первое поддерживается в основном через объявление extern - если только в игру не вступают динамически связанные библиотеки (вероятно, это тот сценарий, который вы ищете).

Мне неизвестна какая-либо среда, которая делает это настолько простым, как вы описываете.

...