标题:segmentation fault怎么解决 求解
只看楼主
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
结帖率:95.37%
 问题点数:0 回复次数:3 
segmentation fault怎么解决 求解
    #include <stdio.h>
#include <semaphore.h>
#include <pthread.h>
#include <fcntl.h>

pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
sem_t* t=NULL;

void* thread(void* arg)
{
    //sleep(10);
    int status=pthread_mutex_lock(&mutex);
    if(status)
    {
        printf("can't lock mutex\n");
        exit(1);
    }
   
    sem_wait(t);
    int value;
    printf("pthread id is %d get resource\n",pthread_self());
    sem_getvalue(t,&value);
    printf("now the semaphore value is %d\n",value);
   
    status=pthread_mutex_unlock(&mutex);
    if(status)
    {
        printf("can't not unlock mutex\n");
        exit(1);
    }
}

int main()
{
    pthread_t pid;
    int status=pthread_mutex_lock(&mutex);
    if(status)
    {
        printf("can't lock mutex\n");
        exit(1);
    }
    sem_init(t,0,3);
    status=pthread_mutex_unlock(&mutex);
    if(status)
    {
        printf("can't unlock mutex\n");
        exit(1);
    }

    int i=0;
    while(i++<3)
        if((pthread_create(&pid,NULL,thread,NULL))!=0)
        {
            printf("pthread can't create.\n");
            exit(0);
        }

    pthread_join(pid,NULL);
    sem_destroy(t);
    return 0;
}   

搜索更多相关主题的帖子: include int status printf exit 
2018-07-20 18:11
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
在Windows下跑没有segmentation fault,,,
在Linux下就出现了。
求解
2018-07-21 10:29
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
已解决
定义时应该写成这样:
sem_t t;//写成这样,sem_t *t;这是一个指针,没有初始化,没有给他非配内存它这时候这时候只是一个也指针, 自然会出错。
 
2018-07-21 10:58
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
2018-07-21 11:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-488718-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013551 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved