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

保定城乡建设局网站做医疗类网站有什么需要审核的

保定城乡建设局网站,做医疗类网站有什么需要审核的,网站规划的流程,网站登录界面图片用什么软件做文章目录 案例描述1代码实现代码解释 案例背景2代码实现代码解析关键概念总结扩展练习 案例描述1 我们将模拟一个简单的售票系统,其中有两个售票窗口同时出售100张票。为了确保不会卖出超过100张票,并且不会出现卖票时的竞态条件(race condi…

文章目录

  • 案例描述1
    • 代码实现
    • 代码解释
  • 案例背景2
    • 代码实现
    • 代码解析
    • 关键概念总结
    • 扩展练习

案例描述1

我们将模拟一个简单的售票系统,其中有两个售票窗口同时出售100张票。为了确保不会卖出超过100张票,并且不会出现卖票时的竞态条件(race condition),我们将使用互斥锁来保护共享资源——剩余票数。

代码实现

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>#define NUM_TICKETS 100
#define NUM_THREADS 2int tickets = NUM_TICKETS;
pthread_mutex_t mutex;void* sell_tickets(void* arg) {while (1) {pthread_mutex_lock(&mutex); // 获取互斥锁if (tickets > 0) {printf("Thread %ld sold ticket: %d\n", (long)arg, tickets);tickets--;pthread_mutex_unlock(&mutex); // 释放互斥锁} else {pthread_mutex_unlock(&mutex); // 释放互斥锁break; // 如果没有票了,退出循环}// 模拟线程间的切换,增加并发冲突的可能性// 可以通过注释掉下面这行代码来查看效果usleep(100); // 线程休眠100微秒}return NULL;
}int main() {pthread_t threads[NUM_THREADS];// 初始化互斥锁if (pthread_mutex_init(&mutex, NULL) != 0) {printf("Mutex init failed\n");return -1;}// 创建两个线程for (int i = 0; i < NUM_THREADS; i++) {if (pthread_create(&threads[i], NULL, sell_tickets, (void*)(intptr_t)(i + 1)) != 0) {printf("Thread creation failed\n");return -1;}}// 等待所有线程完成for (int i = 0; i < NUM_THREADS; i++) {pthread_join(threads[i], NULL);}// 销毁互斥锁pthread_mutex_destroy(&mutex);printf("All tickets have been sold.\n");return 0;
}

代码解释

  • pthread_mutex_t mutex;:定义了一个互斥锁变量。
  • pthread_mutex_lock(&mutex);pthread_mutex_unlock(&mutex);:分别用于获取和释放互斥锁。当一个线程获取到互斥锁后,其他试图获取同一互斥锁的线程将被阻塞,直到第一个线程释放该锁。
  • usleep(100);:让当前线程暂停一段时间,模拟线程间的时间片轮转,以便观察到并发冲突的情况。如果注释掉这一行,可能会减少并发冲突的机会,因为线程可能在执行完一次卖票操作前不会被打断。
  • pthread_create(&threads[i], NULL, sell_tickets, (void*)(intptr_t)(i + 1));:创建新线程并开始执行sell_tickets函数。

通过这个例子,您可以清楚地看到如何在线程之间安全地共享资源以及如何避免竞态条件。请注意,在实际应用中,需要根据具体情况调整互斥锁的应用范围,以最小化锁的粒度,从而提高程序的效率。
好的!我将通过一个详细的嵌入式案例,帮助你理解 线程创建、同步互斥和互斥锁 的概念。我们将使用 POSIX 线程(pthread)库 在 Linux 环境下实现,这是嵌入式开发中常用的多线程编程方法。


案例背景2

假设我们有一个嵌入式系统,需要同时采集传感器数据(如温度)和进行数据处理。为了避免数据竞争,我们需要:

  1. 创建两个线程:一个负责采集数据,另一个负责处理数据。
  2. 使用 互斥锁(Mutex) 保护共享数据(传感器数据)。

代码实现

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>  // 用于 sleep 函数// 定义共享数据
int sensor_data = 0;// 定义互斥锁
pthread_mutex_t mutex;// 线程1:采集传感器数据
void *sensor_thread(void *arg) {while (1) {pthread_mutex_lock(&mutex);  // 加锁sensor_data++;               // 修改共享数据printf("Sensor采集数据: %d\n", sensor_data);pthread_mutex_unlock(&mutex);  // 解锁sleep(1);  // 模拟采集耗时}return NULL;
}// 线程2:处理传感器数据
void *process_thread(void *arg) {while (1) {pthread_mutex_lock(&mutex);  // 加锁int data = sensor_data;     // 读取共享数据printf("Process处理数据: %d\n", data);pthread_mutex_unlock(&mutex);  // 解锁sleep(2);  // 模拟处理耗时}return NULL;
}int main() {pthread_t tid1, tid2;// 初始化互斥锁pthread_mutex_init(&mutex, NULL);// 创建两个线程pthread_create(&tid1, NULL, sensor_thread, NULL);pthread_create(&tid2, NULL, process_thread, NULL);// 等待线程结束(实际中可能需要信号量控制)pthread_join(tid1, NULL);pthread_join(tid2, NULL);// 销毁互斥锁pthread_mutex_destroy(&mutex);return 0;
}

代码解析

  1. 共享数据与互斥锁

    • sensor_data 是共享的全局变量,会被两个线程同时访问。
    • pthread_mutex_t mutex 定义了一个互斥锁,用于保护对 sensor_data 的访问。
  2. 线程函数

    • sensor_thread:模拟传感器数据采集,每次对 sensor_data 加1。
    • process_thread:模拟数据处理,读取 sensor_data 的值。
    • 在访问共享数据前,通过 pthread_mutex_lock 加锁;操作完成后,通过 pthread_mutex_unlock 解锁。
  3. 主函数

    • 初始化互斥锁 pthread_mutex_init
    • 创建两个线程 pthread_create
    • 等待线程结束 pthread_join(实际项目中可能需要更复杂的同步机制)。

关键概念总结

  1. 互斥锁(Mutex)

    • 用于保护共享资源,确保同一时间只有一个线程访问。
    • 操作:lock(加锁) → 临界区操作 → unlock(解锁)。
  2. 线程同步

    • 通过互斥锁协调多个线程的执行顺序,避免数据竞争(Data Race)。
  3. 嵌入式场景注意事项

    • 避免死锁:确保加锁后一定会解锁。
    • 最小化临界区:减少锁的持有时间,提高系统实时性。

扩展练习

  1. 尝试移除互斥锁,观察数据不一致的现象。
  2. 添加第三个线程(如数据上传线程),进一步练习多线程同步。
  3. 研究其他同步机制(如信号量、条件变量)。

文章转载自:

http://MJBDb3rT.xbrxk.cn
http://vIJQckza.xbrxk.cn
http://m3Cl8gIU.xbrxk.cn
http://aqUvq0Wm.xbrxk.cn
http://LcrU3V0O.xbrxk.cn
http://7guGFabw.xbrxk.cn
http://YutN8AuF.xbrxk.cn
http://zpLMuajv.xbrxk.cn
http://ORIaKg37.xbrxk.cn
http://92iUyZe7.xbrxk.cn
http://0vmBqBPT.xbrxk.cn
http://cGdL44Ly.xbrxk.cn
http://o3I38aA7.xbrxk.cn
http://1xlFx0c6.xbrxk.cn
http://b6aQbMbB.xbrxk.cn
http://XpUfOqqy.xbrxk.cn
http://PlJC9gJp.xbrxk.cn
http://8zHFsdrv.xbrxk.cn
http://T7ZvbxY1.xbrxk.cn
http://nVLWXG1w.xbrxk.cn
http://uY8UYxhK.xbrxk.cn
http://FMkhGcNM.xbrxk.cn
http://2F4SaMPz.xbrxk.cn
http://T3SeUP7R.xbrxk.cn
http://G9LOIwb3.xbrxk.cn
http://LAtIspQn.xbrxk.cn
http://2f9hmNsh.xbrxk.cn
http://G5j5tArb.xbrxk.cn
http://1YNCHHp7.xbrxk.cn
http://2ChB57l2.xbrxk.cn
http://www.dtcms.com/wzjs/670911.html

相关文章:

  • 网站开发需要用到哪些软件自己的网站做app
  • 网站开发大学有哪些商城系统
  • 品牌网站设计制作哪家正规潍坊市建设工程交易中心网站
  • 网站主机选择与优化wordpress 收不到邮件
  • 织梦网站名称标签做网站能用ai好还是ps
  • 自己做网站必须要学哪些重庆市渝快办官网
  • 南通公司网站建设网页设计参考板式
  • 无线网站制作校园网站建设与应用
  • 电子商务网站建设与维护李建忠招商网官网
  • 银饰品网站建设规划策划书物联网开发软件有哪些
  • 青岛网站建设企业建站重庆江北营销型网站建设公司推荐
  • 公司注册网站查询深圳ppt设计制作公司
  • 学做婴儿衣服网站天津在线制作网站
  • 网站关键词找不到建筑信息平台app
  • 诏安县城乡建设局网站如何做好百度推广
  • 旅游网站制作建设青海省建设厅官方网站
  • 做网站联盟要多少钱营销型网站怎么做
  • 南京网站制作案例商城小程序费用标准
  • 乌兰察布市建设局网站WordPress添加ftp
  • t恤定制网站哪个好哪个网站可以做封面
  • 微网站是免费的吗非微信官方网页自己做的网站
  • 做好网站建设静态化广东东莞天气预报15天
  • 纺织品做外贸一般在哪个网站上一个公司只能备案一个网站吗
  • 门户网站怎么开发郑州网站建设郑州网站建设
  • 网站做快捷方式青岛做网站企业
  • 门户首页网站建设方案网站建站金融模板
  • 做网站线项目从立项到结束的流程图
  • 县市区没有建设信用网站和平台大数据营销的优缺点
  • 做心悦腾龙光环的网站网络推广策划案范文5篇
  • 珠宝类企业网站(手机端)北仑网站网页建设