使用c++解决leetcode多线程题题目(之一)semaphore

通过 man sem_init 可以查看具体文档。 或者使用: https://man7.org/linux/man-pages/man3/sem_init.3.html sem_init函数是Posix信号量操作中的函数。sem_init() 初始化一个定位在 sem 的匿名信号量。pshared 参数指明信号量是由进程内共享,还是由进程之间共享。如果 pshared 的值为 0,那么信号量将被进程内的线程共享。value 参数指定的初始值。 sem_post是给信号量的值加上一个“1”,它是一个“原子操作”---即同时对同一个信号量做加“1”操作的两个线程是不会冲突的。 sem_wait是一个函数,也是一个原子操作,它的作用是从信号量的值减去一个“1”,但它永远会先等待该信号量为一个非零值才开始做减法。也就是说,如果你对一个值为2的信号量调用sem_wait(),线程将会继续执行,将信号量的值将减到1。如果对一个值为0的信号量调用sem_wait(),这个函数就会原地等待直到有其它线程增加了这个值使它不再是0为止。 ...

2021年4月9日 · 3793 words · rewine

初步认识c++1x的新特性

(1) nullptr 用 nullptr 代替NULL, NULL是一个宏定义,在c和c++中的定义不同,c中NULL为(void*)0,而c++中NULL为整数0 1 2 void foo(char *); void foo(int); 对于这两个函数,如果NULL定义为0的话,foo(NULL)将会出现歧义 使用NULL的情景均可用 nullptr 代替 (2) constexpr constexpr 让用户显式的声明函数或对象构造函数在编译器为常数 constexpr 的函数可以使用递归,从 C++ 14 开始, constexpr 函数可以在内部使用局部变量、循环和分支等简单语句,但 C++ 11 中是不可以的 ...

2020年8月19日 · 3632 words · rewine

[VC++课程设计] 用mfc实现数学函数曲线绘制程序

实验环境 window 10 版本19041 Microsoft Visual Studio Community 2019 版本 16.6.4 实现功能 绘制常见函数的图像 支持普通函数,极坐标函数,参数方程,直接输入数据点 可以删除指定函数图像 可以在一个坐标系中绘制多条数学曲线 显示坐标轴,网格,刻度值,图例 可以选择不同颜色线型来绘制不同的曲线 当鼠标移动到曲线上某点时,可以显示该点的坐标 可以用鼠标拖动图像 可以进行图形的放大,缩小,定量设置显示范围,自动缩放 普通函数x取值范围可设置为跟随显示范围变化 状态栏实时显示鼠标位置,双击显示鼠标精确位置 重要数据的序列化和反序列化 突变函数(如$floor(x)$)和部分y值接近无穷的函数(如$tan(x)$)无法完美显示 ...

2020年7月20日 · 3640 words · rewine

[管理运筹学]线性规划&单纯形法的各种姿势(题目:[NOI2008]志愿者招募)

题目描述 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管。布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者。经过估算,这个项目需要$ N $天才能完成,其中第 $ i $ 天至少需要$A_i$个人。 布布通过了解得知,一共有$M$类志愿者可以招募。其中第$i$类可以从第$S_i$ 天工作到第 $ T_i $ 天,招募费用是每人$C_i$ 元。新官上任三把火,为了出色地完成自己的工作,布布希望用尽量少的费用招募足够的志愿者,但这并不是他的特长。于是布布找到了你,希望你帮他设计一种最优的招募方案。 ...

2019年6月29日 · 3564 words · rewine

[管理运筹学]指派问题的匈牙利算法及其c++实现 (例:「网络流 24 题」分配问题 )

题目描述 有 n 件工作要分配给 n 个人做。第 i 个人做第 j 件工作产生的效益为 c[i][j] 。试设计一个将 n 件工作分配给 n 个人做的分配方案,使产生的总效益最大。 输入格式: 文件的第 1 行有 1 个正整数 n,表示有 n 件工作要分配给 n个人做。 接下来的n 行中,每行有 n 个整数 c[i][j],表示第 i个人做第 j 件工作产生的效益为 c[i][j]。 输出格式: 两行分别输出最小总效益和最大总效益。 ...

2019年6月28日 · 2181 words · rewine