Первый вопрос:
- нужны ли потокам собственные копии переменных?
- или они должны координировать доступ к одной общей копии?
Если вам нужно первое, в других ответах содержатся предложения о «локальном хранилище потока».
Если вам нужно второе, то так или иначе вам нужно убедиться, что на этих серверах есть соответствующий мьютекс.переменные (область мьютекса - одна из проблем, с которой вы сталкиваетесь), и что все потоки используют мьютекс и освобождают мьютекс.Это сложнее.Может даже оказаться, что вам нужно предоставить функции, управляющие доступом к переменным.
Стандартная переменная errno
может быть изменяемым значением lvalue:
extern int *_errno_func(void);
#define errno (*(_errno_func)())
В многопоточном приложении (скомпилированос -DREENTRANT), это то, что происходит;в MacOS X, похоже, так и происходит (они используют имя __error
вместо _errno_func
; оба находятся в пространстве имен реализации).
Возможно, вы захотите или в конечном итоге должнысделать что-то подобное для ваших переменных.Тот факт, что вы говорите, что они статичны, немного улучшает ситуацию.У вас есть только один файл для работы (если вы не достаточно небрежны, чтобы передавать или указывать на эти переменные).