NACHOS C ++: Thread Fork для создания структур данных - PullRequest
0 голосов
/ 14 октября 2011

У меня есть программа, которая прекрасно работает, когда я объявляю и инициализирую свою структуру данных List вверху, а затем вызываю мою функцию generateID.Это также работает, если я объявляю список сверху и инициализирую список внутри функции.Однако проблема, с которой я сталкиваюсь, заключается в использовании потоков для создания списка.Я продолжаю получать ошибки сегментации.

В верхней части моей программы есть мои объявления.

Список * aLine;

Внизу у меня есть две функции.

void CreateListA(int which)
{
   aLine = new List;
   currentThread->Yield();
}

void ThreadTest()
{
   Thread *gA = new Thread("Creates new List A");
   gA->Fork(CreateListA, 1);
   generateID();
}

Теперь, когда я запускаю тест потока, я получаю ошибки сегментации.Я предполагаю, что где-то при создании списков с потоками память запуталась.Но я не могу понять, почему возникнет проблема с этим?Я создал объект проигрывателя таким же образом (с потоками), и программа работала нормально.Сейчас я пытаюсь создать структуру данных списка, и это не удается.*** Обратите внимание, что generateID () использует команды добавления и удаления для манипулирования списком.

Ответы [ 2 ]

2 голосов
/ 14 октября 2011

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

Может быть, generateID () должен бытьфункция в другом потоке и создание списка должны быть в основном.

0 голосов
/ 14 октября 2011

Я предполагаю, что Fork создаст новый поток, поэтому возможно, что genereteID() в основном потоке будет манипулировать списком, еще не будучи созданным.Попробуйте вызвать genereteID() в теме, убедитесь, что список действительно создан.Если нет, отметьте genereteID() правильное создание и инициализацию списка.

...