当前位置:  技术问答>linux和unix

semaphore的问题?

    来源: 互联网  发布时间:2016-04-15

    本文导语:  写了个dining philosopher的程序 运行的时候有fragmentation fault的错误 dbx调试后的结果如下: rohan% dbx -r ph Running: ph  (process id 22629) dbx: no symbol table loaded yet -- use "prog -readsyms" to load them (l@2) signal SEGV (no mappi...

写了个dining philosopher的程序
运行的时候有fragmentation fault的错误
dbx调试后的结果如下:
rohan% dbx -r ph
Running: ph 
(process id 22629)
dbx: no symbol table loaded yet -- use "prog -readsyms" to load them
(l@2) signal SEGV (no mapping at the fault address) at 0xff375120 at 0xff375120
0x00000000ff375120:     lduh     [%i0 + 6], %i2
Entering debugger ... 
(dbx) prog -readsyms                                                         
Reading ph
Reading ld.so.1
Reading libpthread.so.1
Reading librt.so.1
Reading libc.so.1
Reading libaio.so.1
Reading libmd.so.1
Reading libc_psr.so.1
Current function is get_chopstick
   16                   sem_wait(&chops[id]);

看了程序,看不出哪里错了
请高人指点 谢谢
程序如下:
#include 
#include 
#include 
#include 
#include 

#define PILOSOPHER_NUM 5 //the number of philosopher

sem_t chops[PILOSOPHER_NUM]; //set semaphore for PILOSOPHER_NUM chopsticks
sem_t pnt; //set semaphore for print

void get_chopstick(int id)
{
if (id%2 == 0) //even number philosophers get chopsticks from id to id+1
{
sem_wait(&chops[id]);
sem_wait(&chops[(id+1)%PILOSOPHER_NUM]);
}
else //odd number philosophers get chopsticks from id+1 to id
{
sem_wait(&chops[(id+1)%PILOSOPHER_NUM]);
sem_wait(&chops[id]);
}
}

void release_chopstick(int id)
{
sem_post(&chops[id]);
sem_post(&chops[(id+1)%PILOSOPHER_NUM]);
}

//prevent from different threads interleaving printing onto stdout
void draw(int id, char *str)
{
sem_wait(&pnt);
printf( "Philosopher %d, is %s", id, str);
sem_post(&pnt);
}

void phil_sleep(long t)
{
struct timespec slp;

//set up sleep interval
slp.tv_sec = 0;
slp.tv_nsec = t * 1000000; //transfer to microsec

if (nanosleep(&slp, NULL) == -1) 
{
perror("Failed to nanosleep");
}
}

void philosopher(int id)
{
int i;

for (i=0; i

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.util.concurrent类semaphore的类成员方法: semaphore定义及介绍
  • Semaphore was not declared in this scope
  • java命名空间java.util.concurrent类semaphore的类成员方法: drainpermits定义及介绍
  • java线程并发semaphore类示例
  • java命名空间java.util.concurrent类semaphore的类成员方法: availablepermits定义及介绍
  • 自建semaphore库函数
  • java命名空间java.util.concurrent类semaphore的类成员方法: isfair定义及介绍
  • semaphore.h sem.c Posix 信号量 System v 信号量
  • java命名空间java.util.concurrent类semaphore的类成员方法: hasqueuedthreads定义及介绍
  • "Semaphores" 在linux 系统里面是表示什么呢?
  • java命名空间java.util.concurrent类semaphore的类成员方法: getqueuelength定义及介绍
  • 在redhat7.3下无法用sem_open()成功创建一个semaphore,这是什么原因?
  • java命名空间java.util.concurrent类semaphore的类成员方法: getqueuedthreads定义及介绍
  • 信号量 Semaphore
  • java命名空间java.util.concurrent类semaphore的类成员方法: tostring定义及介绍
  • semaphore超时等待如何实现??????
  • java命名空间java.util.concurrent类semaphore的类成员方法: release定义及介绍
  • 包含<asm/semaphore.h>后编译通不过???
  • java命名空间java.util.concurrent类semaphore的类成员方法: reducepermits定义及介绍
  • Linux 下如何实现wait多个semaphore的函数,功能类似windows WaitForMultipleObject
  • java命名空间java.util.concurrent类semaphore的类成员方法: acquireuninterruptibly定义及介绍
  • 〖高分求解〗★★★★★【C语言,用UNIX的 Semaphore 写并发程序.---测试素数】★★★★★〖up有分〗


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3