потокобезопасность
От: Аноним  
Дата: 21.07.04 18:52
Оценка:
Скажите плз. где почитать как в С++ классах можно организовать потокобезопасность доступа к членам. Или как это делается?
Re: потокобезопасность
От: Vlad.  
Дата: 21.07.04 21:56
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Скажите плз. где почитать как в С++ классах можно организовать потокобезопасность доступа к членам. Или как это делается?


С++ в чистом виде не поддерживает потоки. Потоки зависят от того в какой ОС ты работаешь, и какими средствами разработки ты пользуешься, если юзаешь винду, можешь почитать MSDN.
... << Rsdn@Home 1.1.4 beta 1 >>
Re[2]: потокобезопасность
От: Аноним  
Дата: 22.07.04 08:53
Оценка:
Здравствуйте, Vlad., Вы писали:

V>С++ в чистом виде не поддерживает потоки. Потоки зависят от того в какой ОС ты работаешь, и какими средствами разработки ты пользуешься, если юзаешь винду, можешь почитать MSDN.

Спась..
Это я понимаю, в Винде есть процессы и потоки. Дак вот WinApi потоки + С++ код -> как это делается в классах? Я слышал, что STL какая-то имеет потокобезопасные классы, это правда? Где поконкретнее в MSDN найти это место?
Re[3]: потокобезопасность
От: Xentrax Россия http://www.lanovets.ru
Дата: 22.07.04 09:45
Оценка:
Здравствуйте, ГлубокоПреУважаемыйГосподин Аноним, Вы писали:

А>Это я понимаю, в Винде есть процессы и потоки. Дак вот WinApi потоки + С++ код -> как это делается в классах? Я слышал, что STL какая-то имеет потокобезопасные классы, это правда? Где поконкретнее в MSDN найти это место?



Точно также как Pascal + WinApi или Basic + WinApi или X86 Assembler + WinApi
Существуют конечно разные библиотеки и обертки, чтобы один и тот же код компилировался на совсем разных платформах, но в данном случае это к делу не относится.

Есть стандартные объекты синхронизации. Критические секции, в особенности, так как они довольно быстрые. Соответственно в MSDN это раздел Synchronization в Platform SDK -> DLLs, Processes, and Threads

Ну а у вас есть полностью инкапсулированные классы, не имеющие открытых членов, а только методы, возвращающие исключительно константные ссылки и указатели. А дальше для каждого конкртеного случая вы пишете обработку многопточного доступа.

Чтобы этим проникнуться достаточно поискать в исходниках MS CRtl макроопределение _MT
Исходники у меня лежат вот по такому пути Program Files\Microsoft Visual Studio .NET 2003\Vc7\crt\src\*.*
Re[3]: потокобезопасность
От: adontz Грузия http://adontz.wordpress.com/
Дата: 25.07.04 01:24
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Я слышал, что STL какая-то имеет потокобезопасные классы, это правда? Где поконкретнее в MSDN найти это место?


Вроде бы STLPort позволяет нескольким потокам одновременно читать из одного и того же контейнера.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[3]: потокобезопасность
От: fuurin  
Дата: 26.07.04 13:27
Оценка:
А>Дак вот WinApi потоки + С++ код -> как это делается в классах?

local
online

В простом случае используется Critical Secion или Mutex. Перед входом в код (метод), который может выполняться из разных потоков, пытаешься завладеть объектом синхронизации. Так как системой гарантируется владение объектом только одному потоку, то и последующий код будет выполняться только одним потоком в данный момент:


class A
{
  method m
  {
    criticalsection.enter

    // здесь гарантировано доступ только одному потоку

    criticalsection.leave
  }
}


В объекном виде Critical Secion и Mutex можешь взять из ATL библиотеке (смотри файл atlsync.h).
Garbage In Garbage Out
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.