URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 4719
[ Назад ]
Исходное сообщение
"Linux threads (Или я дурак или потоки г..но)"
Отправлено Iancen , 22-Авг-00 18:18
Решил портировать потоки под линух из win32 и столкнулся с парадоксом, или у меня руки кривые или ядро криво компильнуто или я вообще ничего не понимаю или под конец потоки в линухе г..но. Одним словом получилось что потоки в линухе реализованы невытесняемым методом ? т.е. у меня есть два потока, каждый работает в глухом цикле. Если я не вызываю sched_yield() то второй поток у меня не получает управление.<p>пример:<br>#include "unistd.h"<br>#include "pthread.h"<br>#include "sched.h"<p>void *thread_routine1(void *arg){<br> int i=0;<br> sleep(3);<br> for(;i>=0;i++){<br> printf("thread1 %d\n",i);<br>// sched_yield();<br> }<br> return NULL;<br>}<br>void *thread_routine2(void *arg){<br> int i=0;<br> sleep(3);<br> for(;i>=0;i++){<br> printf("thread2 %d\n",i);<br>// sched_yield();<br> }<br> return NULL;<br>}<br>int main (int argc, char *argv[]){<br> pthread_t thread_id1,thread_id2;<br> pthread_attr_t thread_attr1,thread_attr2;<br> pthread_attr_init (&thread_attr1);<br> pthread_attr_init (&thread_attr2);<br> pthread_create (&thread_id1, &thread_attr1, thread_routine1, NULL);<br> pthread_create (&thread_id2, &thread_attr2, thread_routine2, NULL);<br> pthread_join (thread_id1, NULL);<br> pthread_join (thread_id2, NULL);<br> return 0;<br>}<p>Если кто понимает в чем я лопухнулся подскажите, а то такой великий проект пропадает из за этого маразма.<p>p.s.<br>CPU 1шт.<br>Linux 2.2.12
Содержание
- Re: Linux threads (Или я дурак или потоки г..но),Andrew, 20:11 , 22-Авг-00
- RE: Linux threads (Или я дурак или потоки г..но),Igor, 20:40 , 23-Фев-01
Сообщения в этом обсуждении
"Re: Linux threads (Или я дурак или потоки г..но)"
Отправлено Andrew , 22-Авг-00 20:11
: Решил портировать потоки под линух из win32 и столкнулся с парадоксом, или у меня руки кривые или ядро криво компильнуто или я вообще ничего не понимаю или под конец потоки в линухе г..но. Одним словом получилось что потоки в линухе реализованы невытесняемым методом ? т.е. у меня есть два потока, каждый работает в глухом цикле. Если я не вызываю sched_yield() то второй поток у меня не получает управление.<br>Ну не знаю - может с ядром что-то не в порядке.<br>Я ради интереса у себя под 2.2.14 - пример пересобрал<br>все работает, нити переключаются.?<p><br>
"RE: Linux threads (Или я дурак или потоки г..но)"
Отправлено Igor , 23-Фев-01 20:40
откомпилено под FreeBSD 4.2-STABLE FreeBSD 4.2-STABLE #0: Thu Feb 1 14:58:35 MSK 2001 i386 с
параметром -pthread все работает нормально