LINUX.ORG.RU

Переход от LinuxThreads к NTPL


0

0

Логика следующая -
стартуется поток, который ожидает семафор b;
таймер постит семафор b и поток завершен;
процесс ожидает семафор а.
Как правильно переписать приложение(RH9.0):

#include <pthread.h>
#include <semaphore.h>
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <sys/time.h>


sem_t sem_a;
sem_t sem_b;

void post(void)
{
sem_post (&sem_b);
};

struct itimerval timer;
struct sigaction sa;

void timer_handler (int signum)
{
post();
};

void *thread_1(void *data)
{
printf ("Wait for sem_b\n"); fflush (stdout);
sem_wait(&sem_b);
printf ("Thread exit\n"); fflush (stdout);
}

class tcl_07
{
pthread_t thread_id1;
public:
void start(void);
}cl_07;

void tcl_07::start(void)
{
sem_init(&sem_a,0,0);
sem_init(&sem_b,0,0);
pthread_create(&thread_id1,NULL,thread_1,NULL);
};


int main () {


cl_07.start();

sa.sa_handler=&timer_handler;
sigaction(SIGALRM,&sa,NULL);

timer.it_value.tv_sec=5;
timer.it_value.tv_usec=600000;
timer.it_interval.tv_sec=1;
timer.it_interval.tv_usec=00000;
setitimer(ITIMER_REAL,&timer,NULL);


printf ("Wait for sem_a\n"); fflush (stdout);

sem_wait(&sem_a);

return 0;

}

anonymous

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