当前位置: 首页> 文旅> 艺术 > 湛江做建站软仿_icp备案信息查询_seo服务公司怎么收费_seo教学网站

湛江做建站软仿_icp备案信息查询_seo服务公司怎么收费_seo教学网站

时间:2025/7/12 5:33:33来源:https://blog.csdn.net/2401_89847635/article/details/146778893 浏览次数:0次
湛江做建站软仿_icp备案信息查询_seo服务公司怎么收费_seo教学网站

一、信号量

       指的是有一个容器中存放数量一定的卡片,如果容器内有卡片,线程可以获取一张;如果容器内没有卡片,线程只能原地等待容器里出现卡片;

       线程获取完卡片,使用完后需要及时归还,防止其他线程没有卡片使用;

  通俗解释:就是有一群人一起玩一个手机,每次只能一个人有机会玩手机,其他人只能等待当前玩手机的人主动归还后重新分配手机使用;

      实际上容器内可以设置最多有多少卡片可以分配;

二、代码如下


#include<stdio.h>

#include<pthread.h>

#include<semaphore.h>

// 信号量
// sem_t sem_01 这是定义一个变量
 
//int sem_init(sem_t* sem, int phshared, unsigned int value)

// 获取一个凭证,获取不到,会阻塞等待; 
//sem_wait() 

// sem_trywait(sem_t* sem) 尝试获取一个凭证,如果获取不到,返回失败; 

// 归还一个凭证 
// sem_post()

// 获取剩余凭证数
// int get_value(sem_t* sem, int* value) 

sem_t source;

void init(){
    // 成功返回0,失败返回-1 
    int code = sem_init(&source, 0, 0);
    printf("初始返回值:%d \n", code);
}

void* test(void* arg){
    printf("阻塞获取凭证\n");
    
    // 阻塞等待获取凭证 
    int code = sem_wait(&source);
    
    printf("凭证获取结果:%d \n", code);
    
    printf("获取成功。。\n");
}

int main(){
    // 初始化 
    init();    
    
    int value;
    int code = sem_getvalue(&source, &value);
    
    if(code == 0){
        printf("信号量当前的值:&d \n", value);
    }
    
    pthread_t thread;
    
    int c = pthread_create(&thread, NULL, test, NULL);
    printf("线程创建结果(0代表成功):%d \n", c);
    
    printf("请输入一个数来继续:");
    getchar();
    
    // 给信号量加入一个值 
    int post = sem_post(&source);
    printf("sem_post的返回值:%d \n", post);
    
    
    return 0;
}

关键字:湛江做建站软仿_icp备案信息查询_seo服务公司怎么收费_seo教学网站

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: