Платформа, о которой я спрашиваю, — это 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 имеет локальное хранилище потоков и локальное хранилище.
Неясно, как локальное хранилище потока взаимодействует с setcontext / swapcontext.
В Linux на локальное хранилище потоков не влияет setcontext / swapcontext, и некоторые программы полагаются на такое поведение — см. Недавнее обсуждение в списке рассылки netbsd для получения дополнительной информации: swapcontext () вокруг pthreads
Также связаны некоторые мысли о взаимодействии TLS с параллелизмом в C ++: TLS_and_Parallelism.pdf
редактироватьТакже стоит отметить, что makecontext / swapcontext был удален из 7-й версии Open Group Base Specification, поскольку они были помечены как устаревшие в течение некоторого времени. Как альтернатива, Boost.Context недавно был добавлен в библиотеки Boost (хотя он также не поддерживает волоконно-локальное хранилище).
Других решений пока нет …