Как сделать глобальные переменные, содержащиеся в другом потоке класса, безопасными в c - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть файлы, один из которых называется main.c, а другой - disperse.c

.

disperse.c создает потоки для обработки нагрузки в main.c и выглядит примерно так:

void *entry(void *arg) {  
    foo_function()  
}

void disperse() {  
    pthread_t thread;  
    pthread_create(&thread, NULL, entry, (void*) args);  
    pthread_join(thread, NULL);  
}

main.c содержит функцию foo_function () и функция редактирует глобальные переменные. Есть ли способ сделать глобальные переменные, содержащиеся в потоке main.c, безопасными?

1 Ответ

0 голосов
/ 19 ноября 2018

В общем, лучше избегать глобальных переменных, если вы абсолютно не можете делать то, что вы пытаетесь сделать иначе. При использовании pthreads безопасность потока зависит от функции. Не все функции pthreads являются «потокобезопасными» для общих данных. Вы также можете использовать мьютексы потоков для защиты общих данных. По сути, это тип блокировки части общих данных, которая позволяет только одному потоку получать к ней доступ одновременно. Эта статья дает хорошее введение в это: https://randu.org/tutorials/threads/#protect

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...