LeetCode //C - 1195. Fizz Buzz Multithreaded

发布时间:2026/10/8 12:25:43

LeetCode //C - 1195. Fizz Buzz Multithreaded 1195. Fizz Buzz MultithreadedYou have the four functions:printFizz that prints the word “fizz” to the console,printBuzz that prints the word “buzz” to the console,printFizzBuzz that prints the word “fizzbuzz” to the console, andprintNumber that prints a given integer to the console.You are given an instance of the class FizzBuzz that has four functions: fizz, buzz, fizzbuzz and number. The same instance of FizzBuzz will be passed to four different threads:Thread A: calls fizz() that should output the word “fizz”.Thread B: calls buzz() that should output the word “buzz”.Thread C: calls fizzbuzz() that should output the word “fizzbuzz”.Thread D: calls number() that should only output the integers.Modify the given class to output the series [1, 2, “fizz”, 4, “buzz”, …] where thei t h i^{th}ithtoken (1-indexed) of the series is:“fizzbuzz” if i is divisible by 3 and 5,“fizz” if i is divisible by 3 and not 5,“buzz” if i is divisible by 5 and not 3, ori if i is not divisible by 3 or 5.Implement the FizzBuzz class:FizzBuzz(int n) Initializes the object with the number n that represents the length of the sequence that should be printed.void fizz(printFizz) Calls printFizz to output “fizz”.void buzz(printBuzz) Calls printBuzz to output “buzz”.void fizzbuzz(printFizzBuzz) Calls printFizzBuzz to output “fizzbuzz”.void number(printNumber) Calls printnumber to output the numbers.Example 1:Input:n 15Output:[1,2,“fizz”,4,“buzz”,“fizz”,7,8,“fizz”,“buzz”,11,“fizz”,13,14,“fizzbuzz”]Example 2:Input:n 5Output:[1,2,“fizz”,4,“buzz”]Constraints:1 n 50From: LeetCodeLink: 1195. Fizz Buzz MultithreadedSolution:Ideas:Maintain a shared counter cur.Use four semaphores, one for each thread.Initially semNumber 1 because sequence starts at 1.After a thread prints its value, it increments cur and signals the semaphore corresponding to the next value.When cur n, wake all waiting threads so they can exit cleanly.Code:#includestdlib.h#includepthread.h#includesemaphore.htypedefstruct{intn;intcur;sem_tsemFizz;sem_tsemBuzz;sem_tsemFizzBuzz;sem_tsemNumber;pthread_mutex_tmutex;}FizzBuzz;FizzBuzz*fizzBuzzCreate(intn){FizzBuzz*obj(FizzBuzz*)malloc(sizeof(FizzBuzz));obj-nn;obj-cur1;sem_init(obj-semFizz,0,0);sem_init(obj-semBuzz,0,0);sem_init(obj-semFizzBuzz,0,0);sem_init(obj-semNumber,0,1);pthread_mutex_init(obj-mutex,NULL);returnobj;}// Dont change the following declarationsvoidprintNumber(inta);voidprintFizz();voidprintBuzz();voidprintFizzBuzz();staticvoidnextTurn(FizzBuzz*obj){if(obj-curobj-n){sem_post(obj-semFizz);sem_post(obj-semBuzz);sem_post(obj-semFizzBuzz);sem_post(obj-semNumber);return;}if(obj-cur%150)sem_post(obj-semFizzBuzz);elseif(obj-cur%30)sem_post(obj-semFizz);elseif(obj-cur%50)sem_post(obj-semBuzz);elsesem_post(obj-semNumber);}// printFizz() outputs fizz.voidfizz(FizzBuzz*obj){while(1){sem_wait(obj-semFizz);pthread_mutex_lock(obj-mutex);if(obj-curobj-n){pthread_mutex_unlock(obj-mutex);break;}printFizz();obj-cur;nextTurn(obj);pthread_mutex_unlock(obj-mutex);}}// printBuzz() outputs buzz.voidbuzz(FizzBuzz*obj){while(1){sem_wait(obj-semBuzz);pthread_mutex_lock(obj-mutex);if(obj-curobj-n){pthread_mutex_unlock(obj-mutex);break;}printBuzz();obj-cur;nextTurn(obj);pthread_mutex_unlock(obj-mutex);}}// printFizzBuzz() outputs fizzbuzz.voidfizzbuzz(FizzBuzz*obj){while(1){sem_wait(obj-semFizzBuzz);pthread_mutex_lock(obj-mutex);if(obj-curobj-n){pthread_mutex_unlock(obj-mutex);break;}printFizzBuzz();obj-cur;nextTurn(obj);pthread_mutex_unlock(obj-mutex);}}// You may call global function void printNumber(int x)// to output x, where x is an integer.voidnumber(FizzBuzz*obj){while(1){sem_wait(obj-semNumber);pthread_mutex_lock(obj-mutex);if(obj-curobj-n){pthread_mutex_unlock(obj-mutex);break;}printNumber(obj-cur);obj-cur;nextTurn(obj);pthread_mutex_unlock(obj-mutex);}}voidfizzBuzzFree(FizzBuzz*obj){sem_destroy(obj-semFizz);sem_destroy(obj-semBuzz);sem_destroy(obj-semFizzBuzz);sem_destroy(obj-semNumber);pthread_mutex_destroy(obj-mutex);free(obj);}
延伸阅读

更多相关文章

2026/10/7 6:38:51

把播放器配置看懂:3 个关键设置让 mpv 观影体验原地升级

把播放器配置看懂:3 个关键设置让 mpv 观影体验原地升级 【免费下载链接】mpv_PlayKit 🔄 mpv player 播放器折腾记录 Windows conf | 中文注释配置 汉化文档 快速帮助入门 | mpv-lazy 懒人包 Win11 x64 config | 着色器 shader 滤镜 filter 整合方案 …

2026/10/8 12:25:18

SLES 15 下 Nginx 与 PHP-FPM 高并发调优实战

电商大促那几天,最怕的往往不是业务代码出 Bug,而是服务器在流量冲上来之后突然从 500 毫秒变成 3 秒,紧接着后台飘红一片 502。如果你手里跑的是 SUSE Linux Enterprise Server 15,应用栈又是经典的 Nginx PHP-FPM,那…

2026/10/8 12:25:18

MacBook Air安装Windows全攻略:Boot Camp原理与避坑指南

简介:面向刚接触 Mac 且希望在苹果笔记本上同时运行 Windows 双系统的用户,这份图解文档以图文对照形式,完整梳理了用 Boot Camp 助理在英特尔处理器 Mac 上安装 Windows 的全部过程。文档覆盖前置环境检查、磁盘分区规划、安装光盘引导、安装…

2026/10/8 12:25:18

显卡驱动与CUDA版本匹配指南:从安装到多版本共存

1. 显卡驱动与CUDA的关系梳理1.1 为什么先装驱动再装CUDA很多刚接触深度学习或者GPU加速计算的朋友,拿到一张N卡之后第一反应就是去搜“CUDA怎么装”,然后照着某篇教程一顿操作,最后发现nvcc -V报错、nvidia-smi找不到命令、PyTorch死活认不到…

2026/10/8 12:20:16

Linux内核心智模型:宏内核设计哲学与系统调用契约

1. 这不是教科书,是内核开发者日常说话的方式“Linux 内核心智模型与设计哲学”——这标题乍看像哲学课讲义,但如果你真在内核社区混过几年,就会知道:它其实是 Linus Torvalds 在邮件列表里骂人时甩出的那句“你连‘一切皆文件’都…

2026/10/8 10:03:18

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/8 10:03:20

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/8 6:05:44

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 0:02:17

自然数立方等于连续奇数之和:从证明到编程验证

十几年来我一直游走在数学科普和编程教学这两块内容之间,对“看起来像魔法、拆开全是数学”的结论总是格外敏感。最近翻资料时又撞见一句话:任何一个自然数 m 的立方,都可以写成 m 个连续奇数之和。2 的立方等于 3 加 5,3 的立方等…

2026/10/8 0:02:17

C#上位机SSH连接实战:用SSH.NET补齐超时、批量与密钥认证

简介:这是一份基于 C# 开发的 SSH 连接功能半成品工程,原本作为另一个主项目的子功能模块,现独立打包分享。工程采用 WinForms 界面,包含源码、解决方案、安装部署工程、NuGet 依赖包及说明文档,适合正在做远程连接、网…

2026/10/8 0:02:17

Java SpringBoot一体化智能售后系统设计与实现全解析

毕业设计年年做,Java Web 方向的题目翻来覆去就那么几个,但“一体化智能售后系统”这个题,每次看到我都觉得值得认真聊一聊。它不是一个简单 curd 堆出来的管理系统,而是把客户、工单、派单、处理、回访、统计整条链路串起来的一套…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑