Интересно, как же ты блокировки использовал ? Сказал бы что ли в вопросе...
Ну да ладно. Если я правильно все помню, то что-то типа такого:
---
pthread_mutex_t lochka
void * potok(void * arguments)
{
...
if (! pthread_mutex_lock(&lochka)) {
// Лочка прошла. Можно делать всякую фигню
...
pthread_mutex_unlock(&lochka);
} else {
// Залочить не получилось
...
pthread_mutex_unlock(&lochka);
}
...
pthread_exit(NULL);
}
main ()
{
...
pthread_mutex_init(&lochka,NULL);
...
// Создаем поток
if (! pthread_mutex_create(0,0,potok,arguments))
perror("pthread_create");
...
if (pthread_mutex_destroy(&lochka))
perror("pthread_mutex_destroy");
...
}
---
должно работать. У меня когда-то работала програмка с потоками без всяких проблем.
Только учти - блокируется не "доступ к определенным данным", а выполнение потока, пытающегося сделать mutex_lock на заблокированную лочку, до тех пор, пока другой поток (который ее заблокировал) не скажет mutex_unlock.
PS. Код написан под linux (типа, стандарт POSIX).