Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 25.10.2016
Сообщений: 5

Один элемент в списке обрабатывается двумя потоками

10.11.2016, 07:38. Показов 598. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Суть такова: есть 2 потока, первый обходит двусвязный список с головы и считает нулевые биты в значениях элементов. Второй поток должен обходить список с конца и считать единичные биты. Учтенный элемент хотя бы одним потоком освобождается.
Проблема следующая: когда потоки сталкиваются они оба забирают один и тот же элемент, из-за чего он учитывается при подсчетах 2 раза. Если есть идеи, буду рад.

Сама функция потоков:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
int thread_func(bool f) { 
 
unsigned long count = 0, i = 0, tempvalue, n = 1;
 
struct list_head *pos;
Dlist *tempelem;
if (f) pos=mylist.list.next; 
else pos=mylist.list.prev;
do
{
if (f) pos=pos->next;
else pos=pos->prev;
mutex_lock(&my_mutex);
if (f) tempelem = list_entry(pos->prev, Dlist, list); 
else tempelem = list_entry(pos->next, Dlist, list);}
if (pos != &mylist.list)
{
if (f) list_del(pos->prev); 
else list_del(pos->next); 
}
mutex_unlock(&my_mutex);
tempvalue = tempelem -> value; 
while (tempvalue != 0) { 
count += tempvalue & 1; 
tempvalue »= 1; 
n++;
}
i++;
ndelay(1);
kfree(tempelem);
} while(pos != &mylist.list);
if (f) 
{
count = n - count;
printk("Elements from head- %u, "0" bytes - %u\n",i,count);
}
else printk("Elements from tail- %u, "1" bytes - %u\n",i,count);
return 0; 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.11.2016, 07:38
Ответы с готовыми решениями:

Как в односвязном списке поменять местами один элемент и следующий за ним?
Напр., что есть: 0 1 2 3 4 5 6 7 должно быть: 0 1 2 3 4 6 5 7

В списке L с каждой группы подряд равных элементов оставить только один элемент
Опишите программу , которая в списке L с каждой группы подряд равных элементов оставляет только один элемент.

Заданный элемент встречается в некотором списке один единственный раз (является уникальным)
Напишите правило, которое проверяет, если заданный элемент встречается в некотором списке один единственный раз (является уникальным)

1
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
10.11.2016, 12:44
Dreaderror, mutex_trylock()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.11.2016, 12:44
Помогаю со студенческими работами здесь

В списке L из каждой группы подряд идущих равных элементов оставить только один элемент
В списке L из каждой группы подряд идущих равных элементов оставить только один элемент Например, 2 2 1 1 3 3, после введения в программу...

Определить, есть ли в заданном списке хотя бы один элемент, который равен следующему за ним элементу
Помогите, пожалуйста решить: определить, есть ли в заданном списке хотя бы один элемент, который равен следующему за ним ( по кругу)...

Программа, возвращающую список вида: первый элемент — атом, появляющийся в списке один раз, второй - два раза и т.д
Помогите пожалуйста!! Есть список атомов. Написать программу, возвращающую список вида: первый элемент — атом исходного списка,...

Работа с двумя потоками
Задаются две маски файлов. Первая маска - это маска директорий, вторая - это маска файлов. Также задается начальный каталог работы. После...

Создать метод, который определяет, есть ли в списке L хотя бы один элемент, который равен следующему по кругу
Помогите пожалуйста создать метод, который определяет, есть ли в списке L хотя бы один элемент, который равен следующему за ним (по кругу)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 27.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 27.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru