UContext и поток локального хранилища

Платформа, о которой я спрашиваю, — это Linux. Поток локального хранилища, о котором я говорю, pthread_xxx или же __thread в gcc.

Я хочу использовать ucontext, то есть makecontext, swapcontext и т. Д. В моей программе. Итак, мой вопрос, как это работает с локальным хранилищем потока? Более конкретно, если я переключаюсь на другое волокно, используя swapcontext или setcontext, изменяется ли локальное хранилище потока или же локальное хранилище потока не является частью контекста?

Другой вопрос: если TLS будет изменен на setcontext/swapcontext, тогда есть что-нибудь, что будет придерживаться темы, независимо от того, как я изменяю контекст? С другой стороны, если TLS будет придерживаться контекста, то будет ли что-либо придерживаться потока и не будет изменено setcontext / swapcontext?

В соответствии с http://en.wikipedia.org/wiki/Fiber_(computer_science), Платформа Windows имеет локальное хранилище потоков и локальное хранилище.

4

Решение

Неясно, как локальное хранилище потока взаимодействует с setcontext / swapcontext.

В Linux на локальное хранилище потоков не влияет setcontext / swapcontext, и некоторые программы полагаются на такое поведение — см. Недавнее обсуждение в списке рассылки netbsd для получения дополнительной информации: swapcontext () вокруг pthreads

Также связаны некоторые мысли о взаимодействии TLS с параллелизмом в C ++: TLS_and_Parallelism.pdf

редактироватьТакже стоит отметить, что makecontext / swapcontext был удален из 7-й версии Open Group Base Specification, поскольку они были помечены как устаревшие в течение некоторого времени. Как альтернатива, Boost.Context недавно был добавлен в библиотеки Boost (хотя он также не поддерживает волоконно-локальное хранилище).

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]