烫手的热山药 2022-02-24 11:05 采纳率: 77.8%
浏览 22
已结题

关于#c语言#的问题:描述:set_count函数设置播放的次数,_pthread线程一直运行,当count>0时进行播放,然后count减一,一共播放count次

static int count = 0;
void *_pthread(void *param)
{
    while(1)
    {
        while(count > 0)
        {
                play();
                count--;
        }
        usleep(50000);
    }
}

void set_count(int nCount)
{
    count = nCount;
}

描述:set_count函数设置播放的次数,_pthread线程一直运行,当count>0时进行播放,然后count减一,一共播放count次;
问题:如果在播放过程中,外部调用set_count接口更新了count值,怎么保证线程再播放count次?考虑过在set_count中“count = nCount”加上读写锁,然后线程中"count--"前后加上读写锁;但还是有一种情况会异常(当play()执行后,外部调用set_count更新count,线程会把更新后的count--,这样就少了一次),不知道有没有好方法解决该问题?

  • 写回答

1条回答 默认 最新

  • 真相重于对错 2022-02-24 12:45
    关注

    lock();
    play();
    count--;
    onclock();

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月2日
  • 已采纳回答 1月25日
  • 创建了问题 2月24日

悬赏问题

  • ¥15 CBF预处理数据归一化的时候报错了如下图
  • ¥15 qt 转 msvc 后 Opencv 始终打不开视频!
  • ¥15 yolo v5中labelimg的作用
  • ¥15 国赛c题2021,没有理解这一串代码的意思,这样报错该怎么解决(语言-matlab)
  • ¥15 一、执行完中断程序后如何继续运行,二、中断结束后如何跳过中断触发前的点位(LOW点不要继续运行,可以运行UP点)(关键词-程序运行)
  • ¥15 if为什么跳过if 直接执行else 中文
  • ¥200 解决登录微信老版本限制封号问题
  • ¥15 mysql中时间处理问题
  • ¥20 讲解此音频放大电路原理及关键部分
  • ¥15 rtsp 转 m3u8 执行后卡在Decoding VUI