LINUX.ORG.RU

Проблема


0

0

Ребята, в чем может быть проблема ? см. программу:

#include <pthread.h> #include <sched.h> #include <unistd.h> #include <stdio.h>

#include <string> #define THREAD_NUM 50

string getString() { string mvDestCFString; mvDestCFString += "Thread: \n"; return mvDestCFString; }

void *threadRoutine(void *) { while(1) { string s; s = getString(); printf("%s", s.c_str()); sched_yield(); } }

void main(void) { for(unsigned long i=0;i< THREAD_NUM;i++) { pthread_t XThreadId; pthread_create( &XThreadId, NULL, threadRoutine, NULL); } while(1) { string s; s = getString(); printf("%s", s.c_str()); sched_yield(); } }

Информация по системе: Dual PIII 800Mhz, 1.5GB memory kernel 2.2.14-5.0smp RH 6.2

после некоторого времени программа падает коркой

В чем может быть проблема ?

anonymous

А компилил как? -D_REENTRANT задавал?

tvn
()

Забыл спросить glibc++ какая? Там в старых версиях проблема была с использованием строк в тредах. Попробуй использовать char*.

tvn
()

2anonymous

Проблема в ненужном + перед = !!!
mvDestCFString += "Thr.... => Segmentation fault
mvDestCFString = "Thr.... => Ok

-D_REENTRANT ничего не дает

anonymous
()

Но такая операция должна быть корректна. Просто в данном примере она действительна не нужна, а в практике - может быть небходима. Проблема несколько в другом - замечено, что если string инициализирован (например, string mvDestCFString ("") )

- то все тоже работает нормально.

Но ведь вряд ли большинство разработчиков инициализируют строку явно. (особенно актуально, если использовать чужой код, библиотеку, скажем).

Видимо, проблема где-то в конструкторе. Причем она проявляется в многопотоковых приложениях. GDB показывает, что обычно сегментация нарушается при копировании внутреннего буфера (например в операции +=) в функции memcpy, которой передается очень большое значение длины строки.

Вопрос как бы это пофиксить (например поправив код STL)

anonymous
()

может вначале обновить версию gcc/glibc ?

у меня полчаса отработала и не упала, debian/woody: glibc 2.2.5-6, gcc-2.95.4-7, kernel 2.4.18,

althon XP 1600+, 256MB DDR

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.