Непродуман - не совсем то, просто мне нужен полулист-полумножество, который будет оперировать аргументами и переменными работы потоков, которые плодит сервер базы данных, к элементам которого (листа) будет иметь возможность обращаться каждый из потоков, которые в свою очередь делают действия в непредпологаемом порядке (кто знает, что и в какой последовательности захочет пользователь?), поэтому с одной стороны, если пользователь начал работать с элементом, то логично заблокировать чтение и запись в него другим (вдруг кто его удалит, пока этот с ним работает?), но далее получается, что во всех функциях к которым вдруг обратится пользователь нужно делать блокировку через try ... и каждый раз обрабатывать ее ответ ... ну в общем много дописывать одно и тоже, ладно, можно переписать все на макрос ... но тут тогда куча операций передвижений по листу и каждый раз if ... тяжелова-то как-то будет мне кажется ...
рекурсивный мютекс, это тот же самый семафор, ведь так? но это не тот результат, т.к. значит надо следить, сколько раз был заблокирован ресурс, чтобы потом столько же раз его разблокировать
UPDATE: обнаружился странный результат, переписал все на trylock, оказалось, что не определены константы возвращаемых значений, вроде EBUSY, EAGAIN например:
List_template.cpp:7:13: error: ‘EBUSY’ was not declared in this scope
if (res == EBUSY) { \
код:
#define mutex_lock(x) { \
int res; \
res = pthread_mutex_trylock ( x ); \
if (res == EBUSY) { \
pthread_mutex_lock ( x ); \
} \
}
UPDATE2: в руководстве man нет страниц связанных с pthread_mutex_t как-либо вообще, как достать? об pthread_attr_set* и pthread_create есть, а такого почему-то нет, странно ... хотя есть ощущение, что половины манов вообще не хватает ...
UPDATE3: решил ради эксперимента подключить библиотеку errno.h к этому исходнику - на удивление помогло, думал там только сама константа errno и всякое вроде perror