LINUX.ORG.RU

Не могу найти process.h


0

0

Решил разобратся с потоками в си. Нашел пример решил скомпилить, но данной либки нету и как ее поставить я не понимаю. Я думал он должен ставится вместе с компиляторами (gcc\g++), но
ddr@ddr:~$ locate process.h
/opt/qtsdk-2009.02/qt/doc/html/q3process.html
/opt/qtsdk-2009.02/qt/doc/html/qprocess.html
/opt/qtsdk-2009.02/qt/include/Qt/q3process.h
/opt/qtsdk-2009.02/qt/include/Qt/qprocess.h
/opt/qtsdk-2009.02/qt/include/Qt3Support/q3process.h
/opt/qtsdk-2009.02/qt/include/QtCore/qprocess.h
/opt/qtsdk-2009.02/qt/src/corelib/io/qprocess.h
/opt/qtsdk-2009.02/qt/src/qt3support/other/q3process.h
/usr/include/k3process.h
/usr/include/kprocess.h
/usr/include/kptyprocess.h
/usr/include/kdesu/process.h
/usr/include/ksysguard/process.h
/usr/include/qt4/Qt/q3process.h
/usr/include/qt4/Qt/qprocess.h
/usr/include/qt4/Qt3Support/q3process.h
/usr/include/qt4/QtCore/qprocess.h
/usr/share/virtualbox/src/vboxdrv/include/iprt/process.h
/usr/share/virtualbox/src/vboxnetflt/include/iprt/process.h

★★

Ответ на: комментарий от tzukko

Кто-нить знает книгу по Си, чтобы были описаны создание потоков и сокеты (Инет, Юникс)? С упором на линукс.

DDR ★★
() автор топика
Ответ на: комментарий от DDR

Чот не могу откомпилить исходник с pthread. Подскажите компилить с какими-то параметраим надо? Исходник взял с вики.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <pthread.h>

static void wait_thread(void)
{
time_t start_time = time(NULL);

while (time(NULL) == start_time)
{
// do nothing except chew CPU slices for up to one second.
}
}

static void *thread_func(void *vptr_args)
{
int i;

for (i = 0; i < 20; i++)
{
fputs(" b\n", stderr);
wait_thread();
}

return NULL;
}

int main(void)
{
int i;
pthread_t thread;

if (pthread_create(&thread, NULL, thread_func, NULL) != 0)
{
return EXIT_FAILURE;
}

for (i = 0; i < 20; i++)
{
fputs("a\n", stdout);
wait_thread();
}

if (pthread_join(thread, NULL) != 0)
{
return EXIT_FAILURE;
}

return EXIT_SUCCESS;
}


Ругается так:
/tmp/ccE0El10.o: In function `main':
2.c:(.text+0xa2): undefined reference to `pthread_create'
2.c:(.text+0xff): undefined reference to `pthread_join'
collect2: ld returned 1 exit status

DDR ★★
() автор топика
Ответ на: комментарий от DDR

Чего-то не понимаю немного в блокировках mutex.
Вот создаем мы несколько потоков(без проверок пишу тут):
void *p1_f(void *arg){
...
}
void *p2_f(void *arg){
...
}
void *p3_f(void *arg){
...
}
int main(){
pthread_t p1,p2,p3;
pthread_create(&p1,NULL,p1_f,NULL);
pthread_create(&p2,NULL,p2_f,NULL);
pthread_create(&p3,NULL,p3_f,NULL);
...
return 0;
}

Как нам заблокировать перед созданием заблокировать все потоки. Потом разблокировать p1, p1 разблокирует в конце выполнения p2, p2 заблокирует p1 в начале выполнения и разблокирует p3, p3 заблокирует p2.
Не понял как флаг (создаваемый pthread_mutex_init) относится к конкретному потоку, т.е. как поток узнает что именно его блокируют а не другой?

DDR ★★
() автор топика
Ответ на: комментарий от DDR

> […] p1 разблокирует в конце выполнения p2, p2 заблокирует p1 […]

ано… кого, говорите, заблокирует р2? о_О

если p1 разблокирует p2 __в конце своего выполнения__, то что будет блокировать р2?

arsi ★★★★★
()
Ответ на: комментарий от arsi

>если p1 разблокирует p2 __в конце своего выполнения__, то что будет блокировать р2?
ну всмысле они в цикле:) в конце интерации одной.

DDR ★★
() автор топика
Ответ на: комментарий от const86

Ну есть 3 потока и 2 мутакса инициализированы, 1 из 2х заблокирован, какой поток не будет остановится?

DDR ★★
() автор топика
Ответ на: комментарий от DDR

Всем спасибо, разобрался, я просто неправильно сразу представлял и поэтому не понимал.

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