<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[OO_SEN的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/OO_SEN</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; OO_SEN]]></copyright><item><title><![CDATA[哲学家进餐问题]]></title><link>https://blog.csdn.net/OO_SEN/article/details/141866639</link><guid>https://blog.csdn.net/OO_SEN/article/details/141866639</guid><author>OO_SEN</author><pubDate>Tue, 03 Sep 2024 17:05:34 +0800</pubDate><description><![CDATA[哲学家进餐问题（The Dining Philosophers Problem）是计算机科学中的经典同步问题，由荷兰计算机科学家埃德斯赫伯·戴克斯特拉（Edsger Dijkstra）提出。哲学家进餐问题不仅仅是一个理论问题，它反映了在并发编程中常见的同步和资源管理问题。死锁: 如果每个哲学家都先拿起自己左边的叉子，然后等待右边的叉子，那么可能出现所有哲学家都拿着一根叉子、并等待另一根叉子被释放的情况，导致系统进入死锁。进餐条件: 哲学家必须同时拿起左边和右边的叉子才能进餐（即每个哲学家需要两根叉子）。]]></description><category></category></item><item><title><![CDATA[操作系统中进程调度策略]]></title><link>https://blog.csdn.net/OO_SEN/article/details/141859787</link><guid>https://blog.csdn.net/OO_SEN/article/details/141859787</guid><author>OO_SEN</author><pubDate>Tue, 03 Sep 2024 13:53:00 +0800</pubDate><description><![CDATA[不同的调度策略适用于不同的系统需求和应用场景。描述: 每个进程被分配一个固定的时间片，时间片用完后，如果进程未完成，则放回队列末尾，等待下一轮调度。描述: SJF 的抢占式版本，当新到达的进程的剩余时间小于当前执行进程的剩余时间时，抢占当前进程。描述: SJF 的抢占式版本，当新到达的进程的剩余时间小于当前执行进程的剩余时间时，抢占当前进程。描述: 实时调度策略，根据进程的截止时间进行调度，截止时间最早的进程优先执行。描述: 实时调度策略，根据进程的截止时间进行调度，截止时间最早的进程优先执行。]]></description><category></category></item><item><title><![CDATA[Linux 中的中断响应机制]]></title><link>https://blog.csdn.net/OO_SEN/article/details/141684477</link><guid>https://blog.csdn.net/OO_SEN/article/details/141684477</guid><author>OO_SEN</author><pubDate>Thu, 29 Aug 2024 17:40:50 +0800</pubDate><description><![CDATA[它通过分离中断处理程序的顶半部和底半部，确保高效、快速地处理硬件中断，并将复杂的处理延迟到底半部执行。每个中断信号对应一个中断号，CPU 根据中断号查找中断向量表（Interrupt Vector Table，IVT），确定应该调用哪个中断处理程序。中断处理完成后，CPU 恢复之前保存的上下文，并返回被中断的任务。顶半部: 立即执行的部分，通常是尽快处理硬件相关的操作，如确认中断源、读取数据等。CPU 跳转到中断向量表中找到的中断处理程序入口，并开始执行相应的中断处理程序。中断响应机制的主要流程。]]></description><category></category></item><item><title><![CDATA[进程调度算法]]></title><link>https://blog.csdn.net/OO_SEN/article/details/141642940</link><guid>https://blog.csdn.net/OO_SEN/article/details/141642940</guid><author>OO_SEN</author><pubDate>Wed, 28 Aug 2024 16:03:10 +0800</pubDate><description><![CDATA[进程调度算法是操作系统中负责管理进程执行顺序的一组策略和方法。进程调度的目标是有效利用CPU资源，提高系统的吞吐量和响应时间，确保各个进程公平获得CPU时间。]]></description><category></category></item><item><title><![CDATA[exit()与_exit()区别]]></title><link>https://blog.csdn.net/OO_SEN/article/details/141606693</link><guid>https://blog.csdn.net/OO_SEN/article/details/141606693</guid><author>OO_SEN</author><pubDate>Tue, 27 Aug 2024 16:39:50 +0800</pubDate><description><![CDATA[但如果使用 _exit(0)，这个消息不会被打印，因为 _exit() 直接终止了进程，而没有调用 atexit() 注册的函数。例如，在 fork() 创建子进程后，子进程在执行 exec() 前检测到错误，需要立即退出时，应使用 _exit() 而非 exit()，以避免父进程资源的不必要继承。避免干扰: 如果你不想影响文件缓冲区、打开的文件描述符，或不希望执行 atexit() 函数（比如在fork()后的子进程中），那么 _exit() 是最佳选择。最后，调用 _exit() 来真正终止进程。]]></description><category></category></item><item><title><![CDATA[虚拟内存的实现]]></title><link>https://blog.csdn.net/OO_SEN/article/details/141603155</link><guid>https://blog.csdn.net/OO_SEN/article/details/141603155</guid><author>OO_SEN</author><pubDate>Tue, 27 Aug 2024 14:54:16 +0800</pubDate><description><![CDATA[虚拟内存的实现涉及多个关键组件和技术，这些组件共同工作，以提供一个虚拟的内存地址空间，使操作系统能够有效地管理物理内存。]]></description><category></category></item><item><title><![CDATA[进程间通信(IPC)方式]]></title><link>https://blog.csdn.net/OO_SEN/article/details/141564538</link><guid>https://blog.csdn.net/OO_SEN/article/details/141564538</guid><author>OO_SEN</author><pubDate>Mon, 26 Aug 2024 15:05:39 +0800</pubDate><description><![CDATA[描述: 套接字是一种广泛用于网络通信的机制，也可以用于本地进程间的通信（通过 Unix 域套接字）。不同的 IPC 方式适用于不同的场景，选择合适的 IPC 方式可以显著提高进程间通信的效率和可靠性。描述: 匿名管道是一种半双工（单向）的通信机制，通常用于具有亲缘关系的进程（如父子进程）之间的通信。一个进程写入管道，另一个进程从管道读取数据。描述: 信号量是一种用于同步进程操作的机制，可以用来管理进程对共享资源的访问。特点: 支持异步通信，允许多对多进程间的消息交换，适用于需要按优先级处理消息的场景。]]></description><category></category></item><item><title><![CDATA[互斥锁、条件锁、读写锁和自旋锁]]></title><link>https://blog.csdn.net/OO_SEN/article/details/141471315</link><guid>https://blog.csdn.net/OO_SEN/article/details/141471315</guid><author>OO_SEN</author><pubDate>Fri, 23 Aug 2024 17:36:29 +0800</pubDate><description><![CDATA[自旋锁是一种轻量级的锁机制，它在尝试获取锁时，不会立即阻塞线程，而是反复检查锁的状态（自旋），直到获取锁或条件满足。它的目标是提高读多写少场景下的并发性能。适用于需要线程间协调的场景，例如生产者-消费者问题，一个线程等待资源可用，另一个线程通知资源可用。当一个线程尝试获取自旋锁时，如果锁已被占用，线程不会被挂起，而是在一个循环中不断检查锁是否可用。被唤醒的线程会重新获取互斥锁，并检查条件是否满足，满足则继续执行，不满足则继续等待。当持有锁的线程完成对临界区的访问后，释放锁，从而允许其他等待的线程获取锁。]]></description><category></category></item><item><title><![CDATA[死锁如何产生及避免]]></title><link>https://blog.csdn.net/OO_SEN/article/details/141470745</link><guid>https://blog.csdn.net/OO_SEN/article/details/141470745</guid><author>OO_SEN</author><pubDate>Fri, 23 Aug 2024 17:17:46 +0800</pubDate><description><![CDATA[循环等待（Circular Wait）：存在一个循环等待链，即线程A等待线程B持有的资源，线程B等待线程C持有的资源，而线程C又在等待线程A持有的资源，从而形成了一个循环。尽量避免一个线程在持有一个锁的情况下再去获取另一个锁。嵌套锁定：线程在持有一个锁的情况下，尝试获取另一个锁，而另一个锁又可能被其他线程持有，从而导致死锁。尽量减少锁的粒度，将锁的范围限制在尽可能小的代码块中，减少锁的持有时间，从而减少发生死锁的可能性。等待资源：线程在持有资源的同时等待另一个资源，而该资源被其他线程持有并且无法释放。]]></description><category></category></item><item><title><![CDATA[线程异常退出是否会导致程序崩溃]]></title><link>https://blog.csdn.net/OO_SEN/article/details/141468126</link><guid>https://blog.csdn.net/OO_SEN/article/details/141468126</guid><author>OO_SEN</author><pubDate>Fri, 23 Aug 2024 15:59:40 +0800</pubDate><description><![CDATA[线程对共享资源的破坏：如果一个线程在操作共享资源时出错（如破坏了进程的全局状态、内存数据结构等），可能导致整个进程的状态变得不可预测，最终导致进程崩溃。主线程崩溃：如果是主线程（通常是创建进程时的第一个线程）崩溃，整个进程通常会立即终止，因为主线程的生命周期通常与进程的生命周期紧密绑定。堆栈溢出：如果线程发生堆栈溢出，可能导致整个进程崩溃，因为堆栈溢出会破坏内存布局，影响进程的稳定性。线程隔离：尽量将任务划分到不同的线程中执行，确保某个线程的错误不会影响其他线程的执行。防止线程崩溃导致进程崩溃的策略。]]></description><category></category></item><item><title><![CDATA[开发多线程程序时，需要注意那些问题]]></title><link>https://blog.csdn.net/OO_SEN/article/details/141467975</link><guid>https://blog.csdn.net/OO_SEN/article/details/141467975</guid><author>OO_SEN</author><pubDate>Fri, 23 Aug 2024 15:54:50 +0800</pubDate><description><![CDATA[线程安全
竞态条件（Race Condition）：当多个线程同时访问和修改共享资源时，可能会出现竞态条件，导致不确定的行为。需要通过同步机制（如互斥锁、读写锁、原子操作）来保护共享资源。
死锁（Deadlock）：当两个或多个线程相互等待对方释放锁时，程序会陷入死锁状态。避免死锁的一些策略包括：避免嵌套锁、确保加锁顺序一致、使用超时机制等。
活锁（Livelock）：与死锁不同，活锁是指线程不断地尝试获取资源但总是失败，导致无法继续执行。避免频繁重试操作或使用退避算法可以减少活锁的发生。
优先级反转（P]]></description><category></category></item><item><title><![CDATA[NSIS安装或卸载时检查程序是否正在运行]]></title><link>https://blog.csdn.net/OO_SEN/article/details/120666551</link><guid>https://blog.csdn.net/OO_SEN/article/details/120666551</guid><author>OO_SEN</author><pubDate>Sat, 09 Oct 2021 10:57:50 +0800</pubDate><description><![CDATA[转载：https://www.cnblogs.com/z5337/p/4766415.html
转载：https://www.gongzi.org/nsisbuildqqstop.html
转载：http://blog.sina.com.cn/s/blog_6aeaee7e0100smrn.html(如果当前程序正在运行，杀掉进程继续安装或者卸载，给了启发)
转载：https://blog.csdn.net/llmys/article/details/88618177(教程)
使用场景：
如果我们要安装或升]]></description><category></category></item><item><title><![CDATA[string和CString之间的转换]]></title><link>https://blog.csdn.net/OO_SEN/article/details/120061719</link><guid>https://blog.csdn.net/OO_SEN/article/details/120061719</guid><author>OO_SEN</author><pubDate>Thu, 02 Sep 2021 15:09:09 +0800</pubDate><description><![CDATA[string--&gt;CString 
CString CharToWChar(const char* sstr)
{
	int len = MultiByteToWideChar(CP_ACP, 0, sstr, -1, NULL, 0);
	wchar_t* wstr = new wchar_t[len + 1];
	memset(wstr, 0, len + 1);
	MultiByteToWideChar(CP_ACP, 0, sstr, -1, wstr, len);

	CString str]]></description><category></category></item><item><title><![CDATA[QT使用 QJsonDocument 处理 JSON]]></title><link>https://blog.csdn.net/OO_SEN/article/details/119645172</link><guid>https://blog.csdn.net/OO_SEN/article/details/119645172</guid><author>OO_SEN</author><pubDate>Thu, 12 Aug 2021 15:18:30 +0800</pubDate><description><![CDATA[#include "mainwindow.h"
#include &lt;QJsonObject&gt;
#include &lt;QJsonArray&gt;
#include &lt;QJsonDocument&gt;
#include &lt;QJsonParseError&gt;
#include &lt;QJsonValue&gt;
#include &lt;QDebug&gt;
#include &lt;QFile&gt;

MainWindow::MainWindow(QWidget *par]]></description><category></category></item><item><title><![CDATA[QT 添加阴影的三种方式]]></title><link>https://blog.csdn.net/OO_SEN/article/details/114322154</link><guid>https://blog.csdn.net/OO_SEN/article/details/114322154</guid><author>OO_SEN</author><pubDate>Wed, 03 Mar 2021 16:38:08 +0800</pubDate><description><![CDATA[1.设置setStyleSheet
setStyleSheet(“border:1px solid #FFFFFF”);
其他的样式介绍如下：
font: bold; 是否粗体显示
font-family:""; 来设定字体所属家族，
font-size:20px; 来设定字体大小
font-style: nomal; 来设定字体样式
font-weight:20px; 来设定字体深浅
color：black ;字体颜色
border: 1px solid gray;边框大小，样式，颜色
border-im]]></description><category></category></item><item><title><![CDATA[C++  敏感词过滤的算法之DFA算法]]></title><link>https://blog.csdn.net/OO_SEN/article/details/110824907</link><guid>https://blog.csdn.net/OO_SEN/article/details/110824907</guid><author>OO_SEN</author><pubDate>Tue, 08 Dec 2020 10:06:13 +0800</pubDate><description><![CDATA[DFA简介
DFA全称为：Deterministic Finite Automaton,即确定有穷自动机。其特征为：有一个有限状态集合和一些从一个状态通向另一个状态的边，每条边上标记有一个符号，其中一个状态是初态，某些状态是终态。但不同于不确定的有限自动机，DFA中不会有从同一状态出发的两条边标志有相同的符号。

在这幅图中大写字母（S、U、V、Q）都是状态，小写字母a、b为动作。通过上图我们可以看到如下关系
a b b
S -----&gt; U S -----&gt; V U -----&gt; V
一]]></description><category></category></item><item><title><![CDATA[C++ 11 Bind函数用法]]></title><link>https://blog.csdn.net/OO_SEN/article/details/109768765</link><guid>https://blog.csdn.net/OO_SEN/article/details/109768765</guid><author>OO_SEN</author><pubDate>Wed, 18 Nov 2020 11:26:20 +0800</pubDate><description><![CDATA[#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;functional&gt;

using namespace std;
using namespace std::placeholders;

void test(int i, double d, const string &amp;s)
{
	cout &lt;&lt; "i = " &lt;&lt; i &lt;&lt; "  d = " &lt;&lt; d &lt;&lt;]]></description><category></category></item><item><title><![CDATA[C++ STL标准模板库---函数对象及谓词]]></title><link>https://blog.csdn.net/OO_SEN/article/details/100020869</link><guid>https://blog.csdn.net/OO_SEN/article/details/100020869</guid><author>OO_SEN</author><pubDate>Thu, 22 Aug 2019 18:05:32 +0800</pubDate><description><![CDATA[2019/8/22
天气：晴
函数对象
重载函数调用操作符的类，其对象常称为函数对象（function object），即它们是行为类似函数的对象，也叫仿函数(functor),其实就是重载“()”操作符，使得类对象可以像函数那样调用。
注意:
1.函数对象(仿函数)是一个类，不是一个函数。
2.函数对象(仿函数)重载了”() ”操作符使得它可以像函数一样调用。
分类:假定某个类有一个重载的ope...]]></description><category></category></item><item><title><![CDATA[C++ STL标准模板库---容器的使用时机]]></title><link>https://blog.csdn.net/OO_SEN/article/details/100020290</link><guid>https://blog.csdn.net/OO_SEN/article/details/100020290</guid><author>OO_SEN</author><pubDate>Thu, 22 Aug 2019 18:01:58 +0800</pubDate><description><![CDATA[2019/8/22
天气：晴
8月底了快 还是那么热啊
图示




特点
vector
deque
list
set
multiset
map
multimap




典型内存结构
单端数组
双端数组
双向链表
二叉树
二叉树
二叉树
二叉树


可随机存取
是
是
否
否
否
对key而言： 不是
否


元素搜寻速度
慢
慢
非常慢
快
快
对key而言：快
对key而言：快


元素安插...]]></description><category></category></item><item><title><![CDATA[C++ STL标准模板库---map/multimap的概念以及简单使用]]></title><link>https://blog.csdn.net/OO_SEN/article/details/99981893</link><guid>https://blog.csdn.net/OO_SEN/article/details/99981893</guid><author>OO_SEN</author><pubDate>Wed, 21 Aug 2019 18:06:52 +0800</pubDate><description><![CDATA[2019/8/19
天气：晴
天气很晴 空调很冷 外面夏天 屋内冬天
map/multimap容器
map/multimap基本概念
Map的特性是，所有元素都会根据元素的键值自动排序。
Map所有的元素都是pair,同时拥有实值和键值，pair的第一元素被视为键值，第二元素被视为实值，map不允许两个元素有相同的键值。
不能通过map的迭代器改变map的键值，因为map的键值关系到map元素的排...]]></description><category></category></item></channel></rss>