Зависьте от своей ситуации, Вы смогли избегать использования блокировок путем усиления Системы. Поточная обработка. Взаимно блокируемый тот же код в примере Jon становится:
System.Threading.Interlocked.Exchange(valueType,0)
OpenMP - это компонент времени выполнения компилятора, а не платформа.
т.е. Если вы компилируете свое приложение с помощью Visual Studio 2005 или более поздней версии, тогда у вас всегда будет доступен OpenMP, поскольку среда выполнения поддерживает его. (и если у конечного пользователя не установлена среда выполнения Visual Studio C, ваше приложение вообще не будет работать).
Итак, вам не о чем беспокоиться, если вы можете его использовать, оно будет всегда там, как и такие функции, как strcmp. Чтобы убедиться, что у них есть CRT, вы можете установить распространяемый пакет Visual Studio.
edit:
Хорошо, но GCC 4.1 не сможет скомпилировать ваше приложение openMP, поэтому проблема не в целевой машине, а в целевой компилятор. Поскольку все компиляторы имеют предопределенные макросы, указывающие их версию, заключите вызовы OpenMP в блоки #ifdef. например, GCC использует 3 макроса для определения версии компилятора, __ GNUC__, __GNUC_MINOR__ и __GNUC_PATCHLEVEL __
Предполагается, что компиляторы игнорируют директивы #pragma
, которые они не понимают; в этом весь смысл синтаксиса. А функции, определенные в openmp.h
, имеют простое и четко определенное значение в непараллельной системе - в частности, файл заголовка будет проверять, определяет ли компилятор ENABLE_OPENMP
и, если он не включен, предоставьте правильные резервные варианты.
Итак, все, что вам нужно, это копия openmp.h
для ссылки. Вот один: http://cms.mcc.uiuc.edu/qmcdev/docs/html/OpenMP_8h-source.html .
Соответствующая часть кода, однако, такова:
#if defined(ENABLE_OPENMP)
#include <omp.h>
#else
typedef int omp_int_t;
inline omp_int_t omp_get_thread_num() { return 0;}
inline omp_int_t omp_get_max_threads() { return 1;}
#endif
В худшем случае вы можете просто взять эти три строки и поместить их в фиктивный файл openmp.h
и использовать его. Остальное просто подойдет.