当前位置: 首页 > news >正文

七夕特别篇 | 浪漫的Bug

文章目录

  • 前言
  • 一、迷失的爱情漩涡(多线程中的错误同步)
    • 1.1 Bug 背景
    • 1.2 Bug 分析
    • 1.3 Bug 解决
  • 二、心形积分之恋(心形面积计算中的数值积分误差)
    • 1.1 Bug 背景
      • 1.1.1 背景
      • 1.1.2 数学模型
    • 1.2 Bug 分析
      • 1.2.1 初始代码
      • 1.2.2 代码工作流程图
      • 1.2.3 代码分析
    • 1.3 Bug解决
  • 三、总结
    • Bug 1: 多线程环境中的同步问题
    • Bug 2: 心形函数面积计算错误
  • 附录:心形函数代码

前言

Hello!各位C站的朋友们大家好啊!在长达 七个月 的停更后,小刘又回来了!

在这里,小刘要郑重地向大家道个歉,因为学业繁重,所以小刘没能挤出时间来写博客,让朋友们久等了!

在这里插入图片描述

如今,正值七夕佳节(好像过了,但不重要),小刘写了点儿有意思的东西请大家阅览,如果您看完后觉得还不错,那还请您别忘了留下一点儿建议或是点评哦!

一、迷失的爱情漩涡(多线程中的错误同步)

1.1 Bug 背景

假设有两个线程 ABAB 竞争访问一个共享变量 loveValue,代表两位恋人之间的爱情值。我们的目标是保证线程 AB 能够正常地交替更新这个爱情值,以模拟恋人们甜蜜的互动。

初始代码中涉及两个关键函数:increaseLovedecreaseLove,分别用于增加和减少 loveValue 值。

A loveValue increaseLove / decreaseLove A loveValue
B loveValue increaseLove / decreaseLove B loveValue
理想的程序工作流程示意图

代码如下:

#include <iostream>
#include <thread>
#include <mutex>std::mutex loveMutex;
int loveValue = 50;void increaseLove(int amount) {std::lock_guard<std::mutex> lock(loveMutex);loveValue += amount;
}void decreaseLove(int amount) {std::lock_guard<std::mutex> lock(loveMutex);loveValue -= amount;
}int main() {std::thread loverA([&]() {for (int i = 0; i < 10; ++i) {increaseLove(10);}});std::thread loverB([&]() {for (int i = 0; i < 10; ++i) {decreaseLove(5);}});loverA.join();loverB.join();std::cout << "Final Love Value: " << loveValue << std::endl;return 0;
}

1.2 Bug 分析

尽管代码看起来似乎没有问题,但实际上却隐藏着一个隐蔽的陷阱。当线程 A 执行 increaseLove 函数时,它会锁定 loveMutex,然后更新 loveValue。但是,线程 B 试图执行 decreaseLove 函数时,由于 loveMutex 被线程 A 锁定,它将被阻塞,无法执行。反之亦然。

这就意味着线程 AB 之间的爱情互动被锁定,无法交替进行,就像陷入了一个不可逾越的障碍,无法真正地感受到彼此的情感。

A loveValue B increaseLove / decreaseLove increaseLove / decreaseLove A loveValue B
Bug 示意图

1.3 Bug 解决

解决这个问题就得用到一个更为精细的同步机制,以允许线程 AB 在不互相阻塞的情况下更新 loveValue。我们可以使用条件变量,使得线程 AB 可以在适当的时机等待和唤醒。

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>std::mutex loveMutex;
std::condition_variable loveCV;
int loveValue = 50;
bool isIncreasing = true;void increaseLove(int amount) {std::lock_guard<std::mutex> lock(loveMutex);loveValue += amount;isIncreasing = true;loveCV.notify_one();
}void decreaseLove(int amount) {std::unique_lock<std::mutex> lock(loveMutex);loveCV.wait(lock, [] { return !isIncreasing; });loveValue -= amount;isIncreasing = false;loveCV.notify_one();
}int main() {std::thread loverA([&]() {for (int i = 0; i < 10; ++i) {increaseLove(10);}});std::thread loverB([&]() {for (int i = 0; i < 10; ++i) {decreaseLove(5);}});loverA.join();loverB.join();std::cout << "Final Love Value: " << loveValue << std::endl;return 0;
}

爱情有着奇妙的魔力,它使一个人为另一个人所倾倒 ——瑟伯与怀特

二、心形积分之恋(心形面积计算中的数值积分误差)

1.1 Bug 背景

1.1.1 背景

我的目的是计算心形函数面积,心形函数的参数方程可以表示为:
x = 16 ⋅ sin ⁡ 3 ( t ) , y = 13 ⋅ cos ⁡ ( t ) − 5 ⋅ cos ⁡ ( 2 t ) − 2 ⋅ cos ⁡ ( 3 t ) − cos ⁡ ( 4 t ) x = 16 \cdot \sin^3(t), \quad y = 13 \cdot \cos(t) - 5 \cdot \cos(2t) - 2 \cdot \cos(3t) - \cos(4t) x=16sin3(t),y=13cos(t)5cos(2t)2cos(3t)cos(4t)

这是

(Python绘制的函数,代码附到结尾了)

1.1.2 数学模型

我们需要计算参数方程描述的曲线的面积。这可以通过计算积分来实现,其中 t t t 的范围通常从 0 0 0 2 π 2π 2π

心形曲线的面积可以表示为如下积分:

A = 1 2 ∫ 0 2 π y ( t ) ⋅ x ′ ( t ) d t A = \frac{1}{2} \int_{0}^{2\pi} y(t) \cdot x'(t) \, dt A=2102πy(t)x(t)dt

1.2 Bug 分析

1.2.1 初始代码

代码如下:

#include <iostream>
#include <cmath>const double pi = 3.14159265358979323846;// 心形的参数方程
double x(double t) {return 16 * pow(sin(t), 3);
}double y(double t) {return 13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t);
}// 使用数值积分计算面积的函数
double calculateArea(double a, double b, int n) {double h = (b - a) / n;double area = 0.0;for (int i = 0; i < n; ++i) {double x_left = x(a + i * h);double x_right = x(a + (i + 1) * h);double y_mid = (y(a + i * h) + y(a + (i + 1) * h)) / 2.0;area += y_mid * (x_right - x_left);}return area;
}int main() {double a = 0.0;double b = 2 * pi;int n = 10000;double area = calculateArea(a, b, n);std::cout << "Heart Area: " << area << std::endl;return 0;
}

1.2.2 代码工作流程图

初始代码 修复后代码 计算参数方程 初始代码数值积分计算 修复后代码数值积分计算 初始代码输出结果 修复后代码输出结果 调用 调用 返回结果 返回结果 调用 调用 提供参数 提供参数 返回结果 返回结果 初始代码 修复后代码 计算参数方程 初始代码数值积分计算 修复后代码数值积分计算 初始代码输出结果 修复后代码输出结果
理想的代码工作流程图

1.2.3 代码分析

当我们考虑使用矩形法进行数值积分时,我们希望通过将积分区间划分为多个小矩形,对每个小矩形的面积进行累加来逼近曲线所围成的区域面积。在这个 Bug 中,我们的目标是计算心形曲线所包围的区域面积,然而,由于在计算面积时忽略了 x ′ ( t ) x′(t) x(t),导致了错误的结果。

在原始代码中,我们使用了一个简单的循环来遍历积分区间的小段,每个小段的左右边界分别对应函数 x ( t ) x(t) x(t) 的值。我们计算了每个小段中心点的 y 值(即 ( y ( a + i ⋅ h ) + y ( a + ( i + 1 ) ⋅ h ) ) / 2.0 (y(a+i⋅h)+y(a+(i+1)⋅h))/2.0 (y(a+ih)+y(a+(i+1)h))/2.0 ),然后将其乘以区间长度 h h h,最终累加得到近似的区域面积。但在这个过程中,我们遗漏了一个重要的细节:每个小段的宽度(即 h h h)应该乘以 x ′ ( t ) x′(t) x(t) 才能得到正确的面积。

在数学上,当我们计算曲线上一点的切线斜率,即导数,我们可以通过求解 x ( t ) x(t) x(t) 的导数来得到 x ′ ( t ) x′(t) x(t)。因此,在计算每个小段的面积时,我们应该使用 x ′ ( t ) x′(t) x(t) 乘以 h h h 而不仅仅是 h h h,以更精确地逼近曲线围成的区域。

1.3 Bug解决

当运行初始的错误代码时,我们会得到一个错误的心形区域面积。这是因为在计算面积时,我们忽略了 x ′ ( t ) x′(t) x(t) 这个重要因素,导致积分的结果与真实面积相差较大。

假设我们使用以下的参数来运行初始错误代码:

double a = 0.0;
double b = 2 * pi;
int n = 10000;

运行后,输出的心形区域面积可能会是:

Heart Area: 31.4159

实际上,正确的心形区域面积应该接近 82.743 82.743 82.743,这恰恰是因为积分计算没有考虑到参数方程的导数 x ′ ( t ) x′(t) x(t)。为了修复这个问题,我们需要在计算面积时乘以 x ′ ( t ) x′(t) x(t)

// 使用数值积分计算面积的函数
double calculateArea(double a, double b, int n) {double h = (b - a) / n;double area = 0.0;for (int i = 0; i < n; ++i) {double t = a + i * h;double x_left = x(t);double x_right = x(t + h);double y_mid = (y(t) + y(t + h)) / 2.0;area += y_mid * (x_right - x_left);}return area;
}

在修正后的代码中,我们将 x ( t ) x(t) x(t) x ( t + h ) x(t+h) x(t+h) 分别作为小区间的左边界和右边界,并使用中点的 y y y 值乘以小区间的宽度来计算近似的面积。这个修正考虑了 x ′ ( t ) x′(t) x(t) 的影响,使得程序能够更准确地计算心形曲线所围成的区域面积。

三、总结

Bug 1: 多线程环境中的同步问题

这个Bug发生在一个涉及多线程的环境中。通过竞争访问一个共享变量,在代码中模拟了两位恋人之间的爱情值互动。尽管看起来没有问题,但实际上由于同步机制的缺失,线程 A 和 B 之间的爱情互动被锁定,无法正常交替进行,导致无法真实感受到彼此的情感。通过重新设计同步机制,我们解决了这个问题,使得线程 A 和 B 能够在不互相阻塞的情况下更新爱情值,实现了恋人之间情感的自由流动。

Bug 2: 心形函数面积计算错误

这个Bug涉及到计算心形函数所围成的区域面积。初始代码使用矩形法计算数值积分来近似区域面积,但在计算过程中忽略了心形曲线的导数。因此,计算得到的区域面积并不准确。通过引入导数修正,我们重新计算每个小段的面积,考虑了函数的变化率,从而得到了更精确的区域面积。这个修复展示了数学模型与代码之间的相互作用,揭示了在复杂问题中精确建模的重要性。

附录:心形函数代码

import numpy as np
import matplotlib.pyplot as plt# 心形的参数方程
def x(t):return 16 * np.sin(t)**3def y(t):return 13 * np.cos(t) - 5 * np.cos(2*t) - 2 * np.cos(3*t) - np.cos(4*t)# 生成从0到2*pi对应的t值
t_values = np.linspace(0, 2*np.pi, 1000)# 计算相应的x和y值
x_values = x(t_values)
y_values = y(t_values)# 绘制心形
plt.figure(figsize=(6, 6))
plt.plot(x_values, y_values, color='red')
plt.title('Heart Shape Function')
plt.xlabel('x')
plt.ylabel('y')
plt.grid(True)
plt.axis('equal')  # x轴和y轴的相等纵横比
plt.show()

相关文章:

七夕特别篇 | 浪漫的Bug

文章目录 前言一、迷失的爱情漩涡&#xff08;多线程中的错误同步&#xff09;1.1 Bug 背景1.2 Bug 分析1.3 Bug 解决 二、心形积分之恋&#xff08;心形面积计算中的数值积分误差&#xff09;1.1 Bug 背景1.1.1 背景1.1.2 数学模型 1.2 Bug 分析1.2.1 初始代码1.2.2 代码工作流…...

数据结构双向链表

Hello&#xff0c;好久不见&#xff0c;今天我们讲链表的双向链表&#xff0c;这是一个很厉害的链表&#xff0c;带头双向且循环&#xff0c;学了这个链表&#xff0c;你会发现顺序表的头插头删不再是一个麻烦问题&#xff0c;单链表的尾插尾删也变得简单起来了&#xff0c;那废…...

解决政务审计大数据传输难题!镭速传输为政务行业提供解决方案

政务行业是国家治理的重要组成部分&#xff0c;涉及到国家安全、社会稳定、民生福祉等方面。随着信息技术的快速发展和革新&#xff0c;政务信息化也迎来了新一轮的升级浪潮。国家相继出台了《国家信息化发展战略纲要》《“十三五”国家信息化规划》《“十四五”推进国家政务信…...

redis 7高级篇1 redis的单线程与多线程

一 redis单线程与多线程 1.1 redis单线程&多线程 1.redis的单线程 redis单线程主要是指Redis的网络IO和键值对读写是由一个线程来完成的&#xff0c;Redis在处理客户端的请求时包括获取 (socket 读)、解析、执行、内容返回 (socket 写) 等都由一个顺序串行的主线程处理…...

GO语言:Worker Pools线程池、Select语句、Metex互斥锁详细示例教程

目录标题 一、Buffered Channels and Worker Pools1. Goroutine and Channel Example 线程和通道示例2. Deadlock 死锁3. Closing buffered channels 关闭通道4. Length vs Capacity 长度和容量5. WaitGroup6. Worker Pool Implementation 线程池 二、Select1. Example2. Defau…...

vue ui 创建项目没有反应

问题 cmd中输入 vue ui 没有反应 解决办法 vue ui命令需要vue3.0以上的版本才可以 1、查看当前版本 vue --version vue版本在3.0以下是没有ui命令的 2、查看版本所拥有的命令 vue -h 3、卸载之前版本的vue npm uninstall vue-cli -g 卸载完成&#xff0c;检查是否已经…...

go语言中channel类型

目录 一、什么是channel 二、为什么要有channel 三、channel操作使用 初始化 操作 单向channel 双向channel&#xff0c;可读可写 四、close下什么场景会出现panic 五、总结 一、什么是channel Channels are a typed conduit through which you can send and receive …...

基于STM32F1的电子罗盘HMC5883L角度测量

基于STM32F1的电子罗盘HMC5883L角度测量 参考 1. HMC5883L模块 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Axqqv48y-1692885921487)(…\img\HMC5883L.png)] 型号&#xff1a;GY-271使用芯片&#xff1a;HMCL5883L供电电源&#xff1a;3-5V通…...

Oracle解锁表、包、用户、杀会话、停job

Oracle解锁表、包、用户、杀会话、停job 一、创建包tzq_server_pkg二、授权给需要使用的用户log三、解锁表&#xff1a;执行存过unlock_table(schema_name, table_name)四、解锁包&#xff1a;执行存过unlock_package(schema_name, pkg_name)五、解锁用户&#xff1a;执行存过u…...

软考高级系统架构设计师系列论文九十九:论软件开发平台的选择和应用

软考高级系统架构设计师系列论文九十九:论软件开发平台的选择和应用 一、相关知识点二、摘要三、正文四、总结一、相关知识点 软考高级系统架构设计师系列之:面向构件的软件设计,构件平台与典型架构二、摘要 本文从一个行业MIS系统的开发实践,讨论了软件开发平台的选择和应…...

Redis Pub/Sub 指南

Redis 不仅仅是一个数据库&#xff0c;还可以作为支持发布和订阅&#xff08;Pub/Sub&#xff09;操作的消息代理。本文将使用 Navicat for Redis 简要概述 Redis 的 Pub/Sub 功能。 关于发布或订阅消息范式 Pub/Sub 是一种模式&#xff0c;发送者&#xff08;广播者&#xf…...

Nest(2):Nest 应用目录结构和脚手架命令介绍

Nest 应用目录结构和脚手架命令介绍 在正式使用 NestJS 进行开发之前&#xff0c;先来了解下 Nest 应用的目录结构&#xff0c;和一些常用的脚本命令。 工程目录 下面是使用 nest/cli 创建的 Nest 项目的目录结构。 上篇文章中介绍了 src 目录以及目录下各个文件的作用。下面…...

【嵌入式】MKV31F512VLL12 微控制器 (MCU) 、Cyclone® IV E EP4CE10E22I8LN,FPGA-现场可编程门阵列芯片

1、MKV31F512VLL12 微控制器 (MCU) 是适用于BLDC、PMSM和ACIM电机控制应用的高性能解决方案。这些MCU采用运行频率为100MHz/120MHz、带数字信号处理 (DSP) 和浮点单元 (FPU) 的ARM Cortex-M4内核。KV3x MCU配备两个采样率高达1.2MS/s的16位ADC、多个控制定时器以及512KB闪存。 …...

矢量调制分析基础

前言 本文介绍VSA 的矢量调制分析和数字调制分析测量能力。某些扫频调谐频谱分析仪也能通过使用另外的数字无线专用软件来提供数字调制分析。然而&#xff0c;VSA 通常在调制格式和解调算法配置等方面提供更大的测量灵活性&#xff0c;并提供更多的数据结果和轨迹轨迹显示。本…...

ensp-Ipv6配置配置

ensp-Ipv6配置配置 &#x1f4ce;ipv6.zip&#x1f4ce;Ipv6 网络.docx...

java八股文面试[java基础]—— hashCode 与 equals 区别 == 与 equals的区别

两个对象的hashCode()相同时&#xff0c;equals()相等吗&#xff1f;_两个对象的hashcode一样,equal一样么_不想当个程序员的博客-CSDN博客 equals()&#xff1a;比较的是非基本类型的数据的引用地址&#xff08;即内存地址&#xff09;是否相同&#xff0c;但是对于重写equal…...

Dubbo之PojoUtils源码分析

功能概述 PojoUtils是一个工具类&#xff0c;能够进行深度遍历&#xff0c;将简单类型与复杂类型的对象进行转换&#xff0c;在泛化调用时用到&#xff08;在泛化调用中&#xff0c;主要将Pojo对象与Map对象进行相互转换&#xff09; 功能分析 核心类PojoUtils分析 主要成员…...

【C++】—— C++11新特性之 “右值引用和移动语义”

前言&#xff1a; 本期&#xff0c;我们将要的介绍有关 C右值引用 的相关知识。对于本期知识内容&#xff0c;大家是必须要能够掌握的&#xff0c;在面试中是属于重点考察对象。 目录 &#xff08;一&#xff09;左值引用和右值引用 1、什么是左值&#xff1f;什么是左值引用…...

谈一谈redis脑裂

什么是redis脑裂 &#xff08;1&#xff09;一主多从架构中&#xff0c;主节点与客户端通信正常&#xff0c;主节点与哨兵、从节点连接异常&#xff0c;客户端仍正常写入数据 &#xff08;2&#xff09;哨兵判定主节点下线&#xff0c;重新选主 &#xff08;3&#xff09;原主…...

基于原生Servlet使用模板引擎Thymeleaf访问界面

我们常在Spring Boot项目中使用Thymeleaf模板引擎,今天突发奇想&#xff0c;尝试原生Servlet访问&#xff01; 说做就做 搭建完整的WEB项目 其中的大部分依赖都是后续报错 追加进来的 导入依赖 thymeleaf-3.0.11.RELEASE.jar 第一次访问 访问地址: http://localhost:8080…...

【C语言】15-函数-1

1. 初步认识函数 通过前几章的学习,已经可以编写一些简单的 C 语言程序了,但是如果程序的功能比较多,规模比较大,把所有的程序代码都写在一个主函数(main函数)中,就会使主函数变得庞杂、头绪不清,使阅读和维护程序变得困难。此外,有时程序中要多次实现某一功能就需要…...

08-信息收集-架构、搭建、WAF等

信息收集-架构、搭建、WAF等 信息收集-架构、搭建、WAF等一、前言说明二、CMS识别技术三、源码获取技术四、架构信息获取技术五、站点搭建分析1、搭建习惯-目录型站点2、搭建习惯-端口类站点3、搭建习惯-子域名站点4、搭建习惯-类似域名站点5、搭建习惯-旁注&#xff0c;c段站点…...

Qt --- 显示相关设置 窗口属性等

主界面&#xff0c;窗口 最小化 最大化 关闭按钮、显示状态自定义&#xff1a; setWindowFlags(Qt::CustomizeWindowHint); setWindowFlags(Qt::WindowCloseButtonHint); //只要关闭按钮 setWindowFlags(Qt::WindowFlags type) Qt::FrameWindowHint:没有边框的窗口 Qt::Window…...

使用小程序实现左侧菜单,右侧列表双向联动效果

目录 引言理解双向联动效果的重要性scrollview属性介绍实现左侧菜单数据准备渲染菜单列表监听菜单点击事件实现右侧列表数据结构设计初始数据渲染监听列表滚动事件左侧菜单与右侧列表联动获取当前滚动位置计算对应菜单项联动效果优化用户体验考虑平滑滚动效果菜单高亮状态...

selenium中处理验证码问题

验证码 基本作用&#xff1a;可以实现当前访问页面的数据安全性、还可以减少用户的并发数&#xff1b; 类型&#xff1a;1、纯数字、纯字母&#xff1b;2、汉字组合&#xff1b;3、数学运算题&#xff1b;4、滑动&#xff1b;5、图片&#xff08;选不同的、选相同、成语顺序&…...

EMR电子病历系统 SaaS电子病历编辑器源码 电子病历模板编辑器

EMR&#xff08;Electronic Medical Record&#xff09;指的是电子病历。它是一种基于电子文档的个人医疗记录&#xff0c;可以包括病人的病史、诊断、治疗方案、药物处方、检查报告和护理计划等信息。EMR采用计算机化的方式来存储、管理和共享这些信息&#xff0c;以便医生和医…...

一些自定义hooks

文章目录 1、点击框外隐藏弹窗hook 1、点击框外隐藏弹窗hook **描述&#xff1a;**有一个需要自己封装弹窗的组件&#xff0c;实现点击弹窗框外时隐藏弹窗 代码&#xff1a; import { useEffect } from “react”; // 点击框外hooks import { useEffect } from "react&q…...

基于Citespace、vosviewer、R语言的文献计量学可视化分析技术及全流程文献可视化SCI论文高效写作方法

文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0c;可直观的展示主题的研究发展历程、研究现状、研究…...

lEC 61068-2-14_2023环境试验.第2-14部分:试验.试验N:温度变化, 最新版发布

https://download.csdn.net/download/m0_67373485/88251313 lEC 61068-2-14_2023环境试验.第2-14部分:试验.试验N:温度变化 A change of temperature test is intended to determine the effect on the specimen of a changeof temperature or a succession of changes of tem…...

CFDEM学习笔记

本文用来记录自己学习CFDEM的笔记。 资料总结 虚拟机&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1MPMTJQfl76mW0H5bbT_rAg 提取码&#xff1a;rqli 开机密码&#xff1a;530944988 知乎博客&#xff1a;作者说明了如何关闭颗粒碰撞计算来达到提升计算速度。 Githu…...

郑州优化网站/网站制作建设公司

教育 -大学生身体活动与健康-章节资料考试资料-江西师范大学【】 第一章单元作业 第一章单元测试 1、【单选题】磷酸原系统和乳酸能系统供能时的共同特点是( ) A、生成乳酸 B、产生大量的ATP C、生成CO2和水 D、不需要氧 参考资料【 】 2、【单选题】糖、脂肪和蛋白质的热价约为…...

腾讯疫情实时查询/上海网络排名优化

cisco 系列产品口令恢复方法&#xff1a;[url]http://www.cisco.com/warp/public/474/index.shtml[/url]转载于:https://blog.51cto.com/anson/93773...

做网站应该用什么配置的电脑/谷歌浏览器官网下载手机版

一、什么是Vue Vue.js是一个渐进式 JavaScript 框架 通过对框架的了解与运用程度&#xff0c;来决定其在整个项目中的应用范围&#xff0c;最终可以独立以框架方式完成整个web前端项目 为什么要学习Vue 三大主流框架之一&#xff1a;Angular React Vue 先进的前端设计模式&…...

汕头建站方案/网络营销知识点

";...

哪里有html企业网站模板下载/百度网盘手机app下载安装

$random函数调用时,返回一个32位的随机数,它是一个带符号的整形数。如下例&#xff1a; reg[23:0] rand; rand $random % 60; //产生一个在 -59~59 范围的随机数 reg[23:0] rand; rand {$random} % 60; //通过位拼接操作 {} 产生 0~59 范围的随机数 产生一个在 min, max 之间…...

如何购买域名建网站/qq推广软件

Java多线程实现方式主要有四种&#xff1a;继承Thread类、实现Runnable接口、实现Callable接口通过FutureTask包装器来创建Thread线程、使用ExecutorService、Callable、Future实现有返回结果的多线程。 其中前两种方式线程执行完后都没有返回值&#xff0c;后两种是带返回值的…...