Предполагая, что вы знаете, сколько потоков будут вызывать PartialCodec
, вы можете использовать static
переменные внутри функции для облегчения связи между потоками. Голый static
разрешил бы все потоки в PartialCodec
управлять одним и тем же экземпляром объекта.
void * PartialCodec (void *arg) {
static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
static struct state {
/* some state */
} critical;
struct state local;
pthread_mutex_lock(&lock);
local = critical; /* make a local copy */
/* update critical */
pthread_mutex_unlock(&lock);
/* ... refer to local copy of state ... */
}
В critical
состояние дорожек, какая часть проблемы конкретная нить должна решить. Копирование его в local
устанавливает, что поток будет работать над этой частью проблемы. Состояние critical
затем обновляется, поэтому следующий поток, который читает critical
, будет знать, чтобы работать с другой частью проблемы.
Здесь не секрет. У вас есть два простых способа определить, что делает поток: Один, 'void * (*) (void *)' -argument определяет, какая функция начинает поток, Two, 'void * 'определяет, что аргумент этой функции будет. – EOF
Каждый поток автоматически переходит к функции PartialCodec, и аргумент одинаковый для всех потоков. –
. Вы не показываете весь свой код, но мы предполагаем, что 'iTd' отличается для каждого потока, что должно означать, что каждый поток получает другой указатель к элементу 'pcMCData'. – jxh