У меня есть код, который реализует потоки, которые совместно используют ряд простых счетчиков, и я сгруппировал их в структуру, чтобы немного убрать код. Так что теперь я должен получить доступ к счетчикам внутри структуры по ее имени, но в то же время заблокировать структуру с помощью мьютекса. Пока все хорошо, проблем нет, но по причинам обслуживания и простоты кода я хотел бы упаковать блокировку взаимной блокировки структуры и доступ к любому из ее членов в функцию, где я использую в качестве входного аргумента имя члена что я хочу прочитать или изменить.
Я не знаю, возможно ли это или даже удобно, я имею в виду, что использование одного мьютекса для всех счетчиков, используемых всеми потоками, может быть плохой идеей, учитывая тот факт, что один счетчик обычно используется только двумя потоками.
Так вот почему я приехал сюда, чтобы узнать мнение об этом и дать советы о том, как это можно сделать
Чтобы лучше объяснить, что я ищу.
У меня есть структура счетчиков, которая используется в разных потоках
struct SHARED_DATA
{
unsigned int counter1;
unsigned int counter2;
unsigned int counter3;
}
Скажем, структура определена как глобальная
struct SHARED_DATA shared_data = {0};
Итак, я должен получить доступ к счетчикам индивидуально, но я бы хотел упаковать доступ к элементам, одновременно блокируя структуру с мьютексом, все это внутри функции, входной аргумент которой является именем члена структура, которую я хочу прочитать или обновить. Как то так
unsigned int Read_Counters(const char counter)
{
unsigned int value;
pthread_mutex_lock(pthread_mutex_shared_data);
value = shared_data.counter;
pthread_mutex_unlock(pthread_mutex_shared_data);
return value;
}