Threads в C

skyformstd

 
 
#include <stdio.h>
#include <process.h>

void mf( void *a )
{
printf("haha");
}
int main
{
int i;
_beginthread(mf,0,NULL);
return 0;
}
 

почему не выводится сообщение?

skyformstd

разобрался уже

Elina74

И в чем же было дело? Если ты расскажешь, это пригодится потомкам.

skyformstd

как я и подумал сразу - дело в синхронихранизации.то есть видимо не успевало сообщение вывестись до завершения основного потока.Запостил потому что когда я написал в мэйне после создания трэда цикл
for(i=0;i<10000;i++)
  ;
ничего не изменилось.
Как я потом понял(надеюсь правильно на этот раз надиралово было в том, что оптимзатор убрал этот цикл и моя искуственная задержка пошла нах
сделал нормально wait и все заработало

Realist

Вывод буферезуется. В первом приближении в конце выведи перевод строки
printf("haha\n");
Во втором — ботай буфферизацию вывода.

skyformstd

нифига, с переносом не пашет.маза дело в задержке

ppplva

Даже без оптимизации он мог не дотянуть до context switch. 10000 - это же курям насмех.

skyformstd

я пробовал и так:
int k[10000];
...
for(i=0;i<10000;i++)
k[i]=i;
все равно нифига.и только вот так:
int k[10000];
...
for(i=0;i<10000;i++)
k[i]=i;
writeln(k[341]);
все стало ок.То есть надо было использовать результат цикла.

skyformstd

А кстатьи если вот я создаю новую нить, в которой выполняется функция.Если из этой функции я вызову другую обычным способом, то она в какой нити будет?В той же что и функция, откуда ее вызвали?

Realist

да
Оставить комментарий
Имя или ник:
Комментарий: