gpt4 book ai didi

c - sem_wait() 上的总线错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:48 26 4
gpt4 key购买 nike

我正在使用命名信号量编写一个多进程程序,在主进程中我使用以下代码打开信号量

semaphore = sem_open("/msema",O_RDWR|O_CREAT|O_TRUNC,00777,1);      
if (semaphore == SEM_FAILED)
perror("SEMAPHORE");

在子程序中

count_sem=sem_open("/msema",O_RDWR);
if(count_sem==SEM_FAILED)
{
perror("sem_open");
return 1;
}

在 sem_wait() 上

   do {
errno=0;
printf("BeforeSemWait\n");
rtn=sem_wait(count_sem);
printf("afterSemWait\n");
} while(errno==EINTR);
if(rtn < 0) {
printf("Error\n");
perror("sem_wait()");
sem_close(count_sem);
return 1;
}

我从 sem_wait() 得到一个总线错误

 BeforeSemWait

Program received signal SIGBUS, Bus error.
0x00a206c9 in sem_wait@@GLIBC_2.1 () from /lib/libpthread.so.0`

我做错了什么?

编辑:整个代码:master.c:http://pastebin.com/3MnMjUUMworker.c http://pastebin.com/rW5qYFqg

最佳答案

您的程序中一定有其他地方存在错误。以下工作在这里(不需要 O_TRUNC):
semproducer.c:

#include <fcntl.h>
#include <stdio.h>
#include <semaphore.h>
int main () {
sem_t *sem=sem_open("/msema",O_RDWR|O_CREAT /* |O_TRUNC*/ ,00777,1);
if (sem==SEM_FAILED) {
perror("sem_open");
}
else {
while (1) {
sem_post (sem);
printf ("sem_post done\n");
sleep (5);
}
}
}

semconsumer.c:

#include <fcntl.h>
#include <stdio.h>
#include <semaphore.h>
#include <errno.h>
int main () {
sem_t *count_sem=sem_open("/msema",O_RDWR);
if(count_sem==SEM_FAILED) {
perror("sem_open");
return 1;
}
do {
int rtn;
do {
errno=0;
rtn=sem_wait(count_sem);
} while(errno==EINTR);
if(rtn < 0) {
perror("sem_wait()");
sem_close(count_sem);
return 1;
}
printf ("sema signalled\n");
} while (1);
}

使用 gcc semproducer.c -o semproducer -lrtgcc semconsumer.c -o semconsumer -lrt 编译

关于c - sem_wait() 上的总线错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13770370/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com