Uncle Theodore
написал 13 февраля 2005 года в 20:47 (868 просмотров)
Ведет себя
неопределенно; открыл 58 тем в форуме, оставил 1537 комментариев на сайте.
Читаю разные статьи про threads, не могу врубиться. «Mutex ассоциирован с ресурсом, которым пользуются сразу несколько нитей, дабы избежать race condition» — прекрасно. Смотрю примеры — ни фига он ни с чем не ассоциирован, просто замОк в функции…
#include #include #include pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; void *increment(void *arg) { int i; for(i=0;i<5;i++) { pthread_mutex_lock(&mutex1); (*(int *)arg)++; printf("Thread 1, incrementing the number to %i\n", *(int *)arg); sleep(1); pthread_mutex_unlock(&mutex1); }; }; void *decrement(void *arg) { int i; for(i=0;i<5;i++) { pthread_mutex_lock(&mutex1); (*(int *)arg)--; printf("Thread 2, decrementing the number to %i\n", *(int *)arg); pthread_mutex_unlock(&mutex1); }; }; int main() { pthread_t thread1, thread2; int id_1, id_2, i, number = 0; id_1 = pthread_create(&thread1, NULL, increment, (void*)&number); id_2 = pthread_create(&thread2, NULL, decrement, (void*)&number); pthread_join(thread1, NULL); pthread_join(thread2, NULL); return 0; };
В вышеуказанном примере, как mutex1 вообще соотносится с переменной number? Выглядит, что никак…
Good Luck,
UT
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
Так оно и есть.
Он просто область действия функции блокирует.
mutex не то, чтобы ассоциируется в системе с ресурсом.
вот в программе — да, привязывается программером.
может и не к одному объекту, а к группе.
в общем, там, где действительно необходимо блокировать одновременный (ну, типа) доступ к одному и тому же ресурсу нескольким нитям.
и, действительно, это замок и есть. 60
Как уже было отвечено выше — ассоциация mutex с общими для разных нитей данными целиком лежит на программисте.
Маленькое замечание: блок должен быть минимальным, что в Вашем случае означает что все операции не связанные с изменением значения разделяемого ресурса должны быть вне блока. Иначе быстродействие программы резко падает.
А! Понял. У меня на машине даже мануала по pthread_mutex_lock не было. А вот на Интернете вижу:
A thread attempting to lock a mutex that is already locked by another thread is suspended until the owning thread unlocks the mutex first.
Чудненько. Всем большое спасибо. Я собираюсь две следующие лекции посвятить работе с памятью и процессами путем использования thread’ов и IPC. Так что мне надо самому в этом слегка разбираться. :-) Дети, кстати, тащатся. Первый проект мне сдали не все (еще не разобрался почему, в пятницу вечером deadline был), но в аудитории всегда полный аншлаг.
Намек про минимальный блок понял. Спасибо.
Good Luck,
UT