Я родом из C # и у меня немного сложное время с параллелизмом в C. Я не собираюсь вам врать ... Это часть проекта, который я должен сделать для школы.Хотя я профессионально работал с языками высокого уровня, мой старший профессор диссертации бросил нас в тупик, заставив весь класс писать код на C (с которым у большинства из нас практически нет опыта ... :().
В любом случае вернемся к проблеме. У меня есть глобальная целочисленная переменная (начиная с 0), которую нужно одновременно увеличивать на 5 процессов, пока она не достигнет 100 (точнее, 100%).
В основном происходитчто вместо того, чтобы индивидуально изменять завершениеCounter, каждый дочерний процесс делает его копию ...
Есть ли lock(object)
или что-то в этом роде, как это доступно в C #? Я пытался использовать двоичный семафор, ноЯ не мог заставить его работать, я еще не играл с общей памятью.
const int THREADCOUNT = 5;
int completionCounter = 0;
int main(int argc, char **argv)
{
int count = 0;
pid_t pid;
for(count = 0; count<THREADCOUNT; count++)
{
if( (pid = fork()) < 0 )
{
//error...
return -1;
}
else if( pid == 0 )
{
//child;
while(completionCounter != 100 )
{
printf("[%i] process downloading data chunk...", getpid());
//do stuff here
completionCounter += 5;
}
}
else
{
//parent.
}
}
}