C глобальные помехи - общие для потоки?

Что управление исходным кодом использовать действительно зависит от Вашей среды, Вашей корпоративной культуры и общей ситуации того, как проекты обрабатываются в Вашей компании. Более новый "Визуальный Источник, Безопасный" в Основе Команды, передает лучше, чем кусок грязи, которой раньше была VSS. и хорошо в магазине Microsoft с один или немного местоположений. Я также использовал Подрывную деятельность очень успешно, и она интегрируется хорошо в Eclipse. Мне не нравится подавлять продукты, так как у всех есть их положительные и отрицательные моменты, я предполагаю. Но два, которые я упомянул выше, являются действительно хорошими продуктами источника/управления версиями. Если Вы просто начинаете и хотите намочить ноги и изучить методы управления исходным кодом и общие понятия, загрузите продукт с открытым исходным кодом как CVS или Подрывная деятельность, загрузите его и испытайте его.

http://www.ericsink.com/scm/source_control.html имеет некоторую хорошую информацию для работы с.

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

6
задан jameszhao00 27 August 2009 в 04:35
поделиться

3 ответа

Это видно всему процессу, то есть всем потокам. Конечно, это на практике. Теоретически вы не можете сказать, потому что потоки не имеют ничего общего со стандартом C (по крайней мере, до c99, который является стандартом, который действовал, когда был задан этот вопрос).

Но все библиотеки потоков, которые у меня есть когда-либо использованные, имели бы глобальные объекты, доступные для всех потоков.


Обновление 1:

Многие библиотеки потоков (например, pthreads) позволят вам создавать данные, специфичные для потока, средства для функций для создания и использования данных, специфичных для поток, не передавая его через функцию.

Так, например, функция для возврата псевдослучайных чисел может захотеть, чтобы каждый поток имел независимое начальное число. Так что каждый раз

Самый простой способ использования небезопасной библиотеки в многопоточной среде - это обеспечить вызовы оболочки с защитой от мьютексов.

Например, предположим, что ваша библиотека имеет небезопасную для потоков doThis () функция. Что вы делаете, так это предоставляете оболочку для него:

void myDoThis (a, b) {
    static mutex_t serialize;
    mutex_claim (&serialize);
    doThis (a, b);
    mutex_release (&serialize);
}

Что там происходит, так это то, что только один поток в каждый момент времени сможет потребовать мьютекс (и, следовательно, вызвать небезопасную для потоков функцию). Остальные будут заблокированы до тех пор, пока не вернется текущий.

16
ответ дан 8 December 2019 в 13:01
поделиться

Стандарт C / C ++ не поддерживает потоки. Таким образом, все переменные разделяются между потоками. Поддержка потоков реализована в библиотеке времени выполнения C / C ++, которая не является частью стандарта. Время выполнения индивидуально для каждой реализации C / C ++. Если вы хотите написать переносимый код на C ++, вы можете использовать межпроцессную библиотеку boost .

Чтобы объявить локальную переменную потока в Microsoft Visual Studio, вы можете использовать ключевое слово Microsoft __ declspec (thread) .

1
ответ дан 8 December 2019 в 13:01
поделиться

Как упоминалось в @Pax, статические переменные видны всем потокам. Нет никакой конструкции данных C ++, связанной с конкретным потоком.

Однако в Windows вы можете использовать TlsAlloc API, чтобы выделить индекс для данных конкретного потока и поместить этот индекс в статическую переменную. Каждый поток имеет свой собственный слот, к которому вы можете получить доступ, используя этот индекс и TlsGetValue и TlsSetValue. Для получения дополнительной информации прочтите статью Использование локального хранилища потоков в MSDN.

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

1
ответ дан 8 December 2019 в 13:01
поделиться