Привет, ребята.Моя программа использует OpenMP в нескольких частях для многопоточности.Это работает по большей части, но иногда останавливается и просто сидит там.Поэтому я запускаю его в отладчике и нахожу область, в которой он останавливается.Затем я пытаюсь изучить текущие переменные, и я получаю это:
169 if(0<=myPtr[3] && myPtr[3]<=1){//Reassign the velocities.
(gdb) print myPtr[3]
No symbol "myPtr" in current context.
Я не уверен, почему это так.Я могу напечатать это, когда это только однопоточный.Я приватизировал эту переменную, и я думаю, что программа не будет знать, на какой поток я ссылаюсь, когда я прошу ее напечатать что-нибудь (даже если это http://cc.jct.ac.il/cc-res/online-doc/gdb/gdb_26.html#SEC26 говорит, что текущий поток всегда будет ..?).Так что, если я выберу один поток, я получу тот же материал:
(gdb) info threads
3 process 32970 thread 0x4203 0x90f9846e in __semwait_signal ()
2 process 32970 thread 0x3007 0x90f9846e in __semwait_signal ()
* 1 process 32970 local thread 0x2e03 mover3dsurfaces (.omp_data_i=0xbffff030) at mover3dsurfaces.cpp:174
(gdb) thread 1
[Switching to thread 1 (process 32970 local thread 0x2e03)]
mover3dsurfaces (.omp_data_i=0xbffff030) at mover3dsurfaces.cpp:174
174 partList.velocity(i,3) = velPtr[2];
(gdb) print velPtr[1]
No symbol "velPtr" in current context.
Я на самом деле немного запутался в этой части.У моей машины только два процессора.Как может быть 3 темы?Я вижу, что два шестнадцатеричных числа перед __semwait_signal () одинаковы, но я не знаю, почему они разделены.Как я могу посмотреть на переменные для одного потока?
Спасибо!