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

做网页设计网站有哪些竞价推广sem

做网页设计网站有哪些,竞价推广sem,阿里云自带wordpress,广告传媒公司加盟代理一、锁基础与核心概念锁的作用与类型 作用:保护共享资源,防止多线程并发访问导致数据竞争和不一致。类型: 互斥锁(Mutex):同一时间仅一个线程可访问资源(如 std::mutex、QMutex)。读…

一、锁基础与核心概念

  1. 锁的作用与类型

    • 作用:保护共享资源,防止多线程并发访问导致数据竞争和不一致。
    • 类型
      • 互斥锁(Mutex):同一时间仅一个线程可访问资源(如 std::mutexQMutex)。
      • 读写锁(ReadWriteLock):允许多个读线程或一个写线程(如 QReadWriteLock)。
      • 自旋锁(SpinLock):忙等待锁,适用于短临界区(无标准库实现,需手动或第三方库)。
      • 信号量(Semaphore):控制多资源并发访问(如 QSemaphore)。
  2. 死锁的产生与避免

    • 产生条件:循环等待、互斥、不可抢占、持有并等待。
    • 避免策略
      • 固定加锁顺序:所有线程按相同顺序获取锁(例:先锁A再锁B)。
      • 超时机制:使用 try_lock_for() 避免永久阻塞。
      • 减小锁粒度:仅保护必要数据,缩短持有时间。
      • 锁分解:将大锁拆分为多个小锁。

二、C++锁机制(STL)

1. std::lock_guard vs std::unique_lock
特性std::lock_guardstd::unique_lock
灵活性构造时加锁,析构解锁支持手动加/解锁和延迟加锁
所有权不可转移可转移(如 std::move
性能更高(无额外开销)稍低(功能更多)
适用场景简单临界区需灵活控制的复杂场景

代码示例

// lock_guard 示例
std::mutex mtx;
{std::lock_guard<std::mutex> lock(mtx); // 自动加锁// 临界区操作
} // 自动解锁// unique_lock 延迟加锁
std::unique_lock<std::mutex> ulock(mtx, std::defer_lock);
ulock.lock(); // 手动加锁
ulock.unlock(); // 手动解锁
2. adopt_lock/defer_lock/try_to_lock 用法
  • std::adopt_lock:假定锁已被当前线程锁定,构造时不加锁。
    mtx.lock();
    std::lock_guard<std::mutex> lock(mtx, std::adopt_lock); // 直接接管已加锁的mtx
    
  • std::defer_lock:构造时不加锁,后续手动控制。
  • std::try_to_lock:尝试非阻塞加锁,失败不阻塞。

三、Qt锁机制与多线程同步

1. Qt多线程同步工具
工具用途示例
QMutex基础互斥锁QMutexLocker locker(&mutex);
QReadWriteLock读写分离锁(多读单写)QReadLocker rlock(&rwLock);
QSemaphore控制多资源访问(如生产者-消费者)sem.acquire(); sem.release();

生产者-消费者示例

QSemaphore freeSpace(10); // 缓冲区大小=10
QSemaphore usedSpace(0);void Producer::run() {freeSpace.acquire(); // 申请空闲位// 生产数据usedSpace.release(); // 增加已使用位
}
void Consumer::run() {usedSpace.acquire(); // 消费数据freeSpace.release();
}
2. 信号槽的线程安全控制
  • 连接类型
    • Qt::DirectConnection:槽函数在发送者线程执行(跨线程危险)。
    • Qt::QueuedConnection:槽函数在接收者线程执行(跨线程安全)。
connect(sender, &Sender::signal, receiver, &Receiver::slot, Qt::QueuedConnection);

四、死锁场景与解决方案

面试题:手写一个线程安全的单例模式(双检锁)
class Singleton {
public:static Singleton* getInstance() {if (instance == nullptr) { // 第一次检查std::lock_guard<std::mutex> lock(mtx);if (instance == nullptr) { // 第二次检查(避免重复创建)instance = new Singleton();}}return instance;}
private:static Singleton* instance;static std::mutex mtx;
};
// 初始化静态成员
Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mtx;

关键点:双检锁减少锁竞争,保证线程安全。


五、线程安全队列实现(C++11版)

#include <queue>
#include <mutex>
#include <condition_variable>template<typename T>
class SafeQueue {std::queue<T> queue;std::mutex mtx;std::condition_variable cv;
public:void push(T item) {std::lock_guard<std::mutex> lock(mtx);queue.push(item);cv.notify_one(); // 唤醒一个等待线程}T pop() {std::unique_lock<std::mutex> lock(mtx);cv.wait(lock, [this]{ return !queue.empty(); }); // 避免虚假唤醒T val = queue.front();queue.pop();return val;}
};

核心机制

  • 条件变量:空队列时阻塞 pop() 线程,直到 push() 唤醒。
  • unique_lock:配合 cv.wait() 需手动解锁需求。

总结与面试技巧

  1. 基础必考
    • 手写双检锁单例、线程安全队列。
    • 解释 lock_guardunique_lock 区别。
  2. 高阶考点
    • Qt信号槽线程控制(QueuedConnection)。
    • 死锁规避策略(顺序加锁、超时机制)。
  3. 答题技巧
    • 强调边界处理:如空队列 pop()、锁未释放场景。
    • 结合Qt特性:如 “在Qt中优先用 QMutexLocker 而非手动 lock/unlock”。
    • 性能对比:读写锁 vs 互斥锁在高读场景下的优势。

所有代码需注意异常安全(如锁的RAII管理)和跨平台兼容(Qt锁 vs STL锁)。

http://www.dtcms.com/a/485163.html

相关文章:

  • 宜宾建设网站北滘建网站
  • 喊人做网站需要注意些什么自己做的网站会被黑吗
  • 国外印花图案设计网站移动端有哪些
  • 租用空间做网站做网站对外贸有什么用
  • 跨国网站浏览器网站的题目
  • 泰州市网站建设制作做网站中二级导航链接到一级导航
  • 明年做哪个网站致富网站建设公司哪家好该如何选择
  • 邢台做网站信息找工作的网站平台
  • 网站建设与维护实训网站建设公司名称
  • 张家界网站seo跟黄聪学WordPress主题开发
  • 河南省教育厅官方网站师德建设wordpress 更新翻译
  • 360度街景实景地图下载十堰seo优化方法
  • 外贸营销型建站南京市建设执业资格中心网站
  • 网站统计代码怎么添加大型网站的优化方法
  • 博物馆文化网站建设wordpress 文章管理
  • 网站开发asp 视频企业培训机构排名前十
  • 知名网站建设托管手机商城小程序
  • 网站优化seo方案做游戏网站年入百万
  • 涿州网站建设公司公司起名字大全免费好听
  • 宁波专业做公司网站的科技公司c 视频播放网站开发
  • 适合当手机主页的网站注册网站费属于什么费用
  • 免费的行情网站app软件大全免费拍卖网站模板
  • 做网站的关键技术广州网站开发 英诺科技
  • 杭州哪个网站建设最好中学院新校区建设专题网站
  • 网站文件服务器wordpress同时登录
  • 餐饮食材配送网站开发企划书网页分析工具
  • 建个企业网站需要多久建筑模板是什么东西
  • 做exo小说的网站php网站开发好学吗
  • 摄影网站的制作网站显示正在建设中
  • 网站建设策划书的要求wordpress网站建设教程视频