Есть ли способ использовать локальные переменные потока при использовании ACE? - PullRequest
4 голосов
/ 11 марта 2010

Я использую потоки ACE, и каждый поток должен иметь свой собственный член int. Это возможно?

Ответы [ 5 ]

2 голосов
/ 11 марта 2010

ACE вызывает это «хранилище, специфичное для потока». Проверьте это: ACE_TSS . Это все, что я знаю об этом, извините, больше не могу помочь.

Страница Wikipedia для локального хранилища потоков говорит, что есть способ pthreads сделать это тоже.

0 голосов
/ 11 марта 2010

ACE_TSS не может установить начальное значение для всех потоков; вы можете легко установить начальное значение сразу после ввода в вашу функцию потока.

0 голосов
/ 11 марта 2010

GCC напрямую поддерживает TLS для некоторых целей . Вы можете использовать специфическое для GCC ключевое слово __thread для определения локальных переменных потока (должно быть статическим или глобальным).

В libACE встроен локальный поток, вы можете проверить документацию и посмотреть пример кода .

0 голосов
/ 11 марта 2010

Да. Вы можете использовать шаблон ACS_TSS<type>, который предназначен для «специфичного для потока хранилища» (т. Е. Локальных переменных потока).

Подробнее см. Документы в ACE_TSS .

.
0 голосов
/ 11 марта 2010

Это зависит от платформы. Windows, например, вы должны использовать __declspec( thread ). Компилятор будет использовать TLS API (TlsAlloc, TlsFree и друзья), а в Win32 вы не должны всегда использовать FLS (Fiber Local Storage) вместо TLS, но TLS API в любом случае молча перенаправляет вас в FLS любая современная версия Win32.

...