Форум программистов, компьютерный форум CyberForum.ru

С под Linux

Войти
Регистрация
Восстановить пароль
 
wad1970
0 / 0 / 0
Регистрация: 02.02.2016
Сообщений: 3
#1

Читающий поток мешает пишущему? - C Linux

24.01.2017, 14:32. Просмотров 224. Ответов 6
Метки нет (Все метки)

Есть 2 потока.
В одном сформированный массив переносим в массив DataDT
C
1
memcpy(&DataDT[Num].AccTime,&RecePack[3],100);
В другом проверяем DataDT[0].AccTime==0
Если оградить их Mutex-ами то всё нормально, в противном случае DataDT[Num] - полностью сдвигается на 1 байт - почему так может быть? ведь во втором потоке я ничего не пишу в него?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2017, 14:32     Читающий поток мешает пишущему?
Посмотрите здесь:

C++ Создал поток. В нем выделил буффер. Поток выполнился, но из за буфера ругнулся.
BSOD BSOD очень мешает
Новый поток мешает открытию новой формы C#
Передать текст в поток C Linux
Mutex - Возможно ли создать новый поток для участка кода C Linux
Posix поток C Linux
Метод, читающий входной поток и вычисляющий контрольную сумму прочитанных данных Java SE
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grgdvo
528 / 469 / 131
Регистрация: 02.09.2012
Сообщений: 1,374
24.01.2017, 17:25     Читающий поток мешает пишущему? #2
приведите код целиком.
HighPredator
5454 / 1820 / 335
Регистрация: 10.12.2010
Сообщений: 5,384
Записей в блоге: 3
25.01.2017, 08:08     Читающий поток мешает пишущему? #3
Цитата Сообщение от wad1970 Посмотреть сообщение
Если оградить их Mutex-ами то всё нормально, в противном случае DataDT[Num] - полностью сдвигается на 1 байт - почему так может быть?
C
1
memcpy(&DataDT[Num].AccTime,&RecePack[3],100);
Значит скорее всего у вас на момент записи изменяется значение Num
wad1970
0 / 0 / 0
Регистрация: 02.02.2016
Сообщений: 3
25.01.2017, 11:01  [ТС]     Читающий поток мешает пишущему? #4
Спасибо что откликнулись, всё же причина оказалась в самом memcpy.
Видимо memcpy не могло работать с адресом &DataDT[Num].AccTime не выровненным по границе слова,
а когда сделал
C
1
memcpy(&DataDT[Num],&RecePack[2],100);
то всё ОК

Добавлено через 4 минуты
А структура вот такая была
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
typedef struct
{
  u8 Num;
  u16 TimeAcc;
  u8  Work_Sensor[MAX_QN_DT];   // массив неисправностей каналов
      //0 - канал исправен
      //1 - обрыв рамки
      //2 - генерация канала
  u16 Intensity[MAX_QN_DT];     // 
  u16 IntenLorry[MAX_QN_DT];    //
  u16 TimePresence[MAX_QN_DT];  //
  u8  AverVelo[MAX_QN_DT];      // 
} t_DataDT;
extern t_DataDT DataDT[4];    //
HighPredator
5454 / 1820 / 335
Регистрация: 10.12.2010
Сообщений: 5,384
Записей в блоге: 3
25.01.2017, 11:22     Читающий поток мешает пишущему? #5
Вряд ли. memcpy штука тупая в том смысле, что ей плевать как выравнены данные, с которыми она работает. Мне интересно другое: зачем вы 100 байт копировали в поле u16?
wad1970
0 / 0 / 0
Регистрация: 02.02.2016
Сообщений: 3
26.01.2017, 05:50  [ТС]     Читающий поток мешает пишущему? #6
Начиная с поля u16 я обновлял всю структуру, на самом деле там не 100 байт, а sizeof(DataDT)-1 написано было.
Может потому и выравнивалось , что адрес приёмника - &u16.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2017, 07:43     Читающий поток мешает пишущему?
Еще ссылки по теме:

Метод, читающий входной поток и вычисляющий контрольную сумму прочитанных данных Java SE
Java SE Метод, читающий входной поток
Разработать программу, в которой основной поток, принимает поток ввода и контролирует созданные потоки. C++ Linux
Апостроф мешает жить! Delphi БД
Ошибка-Текущий поток должен быть задан как поток однопоточного контейнера STA PascalABC.NET

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

Или воспользуйтесь поиском по форуму:
HighPredator
5454 / 1820 / 335
Регистрация: 10.12.2010
Сообщений: 5,384
Записей в блоге: 3
26.01.2017, 07:43     Читающий поток мешает пишущему? #7
Давайте релевантный код, а то гадание на кофейной гуще получается.
Yandex
Объявления
26.01.2017, 07:43     Читающий поток мешает пишущему?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru