LINUX.ORG.RU

Возвращаясь: Семафоры в Red Hat 9.0


0

0

Уважаемый anonymous 05.10.2004 ответил по поводу программы которая нормально работает в RH7.2, но не работает в RH9.0, что в принципе лечится #export LD_ASSUME_KERNEL=2.4.2 хотелось выяснить почему и пример работает везде и после имплантации в Ваш пример таймера стало ясно - из-за таймера.
Может у кого есть идеи?

Ваш пример работаюший:
Не знаю, как и что, но вот такая-то программа работает и с ntpl.
#include <pthread.h>
#include <semaphore.h>
#include <stdio.h>
+++ #include <unistd.h> для sleep (без этого у меня не компилится)


static sem_t sem_a;

static sem_t sem_b;

static pthread_t thread_id1;

void *thread_1(void *data)

{ printf ("Wait for sem_b\n"); fflush (stdout);

sem_wait(&sem_b);

printf ("Thread exit\n"); fflush (stdout); }

int main () {

sem_init(&sem_a,0,0);

sem_init(&sem_b,0,0);

pthread_create(&thread_id1,NULL,thread_1,NULL);

sleep (10);

sem_post (&sem_b);

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

sem_wait(&sem_a);

return 0;

}


Вот мой не работающий(в RH9.0(NTPL)) пример:
(Должен висеть мертво как и первый, но вываливаеся на return)
#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; //tn_tp
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

Самое смешное, что у меня первый пример не работает, а второй работает на Redhat 9

g++ (GCC) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)

glibc-2.3.2-11.9

2.4.20-8

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