p(mutex); write (); v(mutex); v(empty); v(c); } I
D (){
while(true){
P (full); p(mutex); write (); v(mutex); v(empty); v(d);
26. 进程和线程的区别介绍?
1、 首先是定义
进程:是执行中一段程序,即一旦程序被载入到内存中并准备执行,它就是一个进程。 进程是表示资源分配的的基本概念,又是调度运行的基本单位,是系统中的并发执行的 单位。 线程:单个进程中执行中每个任务就是一个线程。线程是进程中执行运算的最小单位。
2、 一个线程只能属于一个进程,但是一个进程可以拥有多个线程。多线程处理就是允 许
一个进程中在同一时刻执行多个任务
3、 线程是一种轻量级的进程,与进程相比,线程给操作系统带来侧创建、维护、和管 理的
负担要轻,意味着线程的代价或开销比较小。
4、 线程没有地址空间,线程包含在进程的地址空间中。线程上下文只包含一个堆栈、 一
个寄存器、一个优先权,銭程文木包含在他的进程的文木片段中,进程拥有的所有 资源都属于线程。所有的线程共享进程的内存和资源。同一进程中的多个线程共享代 码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥 有自己的栈段,寄存器的内容,栈段又叫运行时段,用来存放所有局部变量和临时变 里。
5、 父和子进程使用进程间通信机制,同一进程的线程通过读取和写入数据到进程变量 来
通信。
6、 进程内的任何线程都被看做是同位体,且处于相同的级别。不管是哪个线程创建了 哪
一个线程,进程内的任何线程都可以销毁、挂起、恢复和更改其它线程的优先权。线
程也要对进程施加控制,进程中任何线程都可以通过销毁主线程来销毁进程,销毁主线 程将导致该进程的销毁,对主线程的修改可能影响所有的线程。
7、子进程不对任何其他子进程施加控制,进程的线程可以对同一进程的其它线程施加 控制。
子进程不能对父进程施加控制,正程中所有线程都可以对主线程施加控制。 相同点:
进程和线程都有ID脣存器组、状态和优先权、信息块,创建后都可更改自己的属性, 都可与父进程共享资源、都不鞭直接访问其他无关进程或线程的资源。
27. 请描述分布式的优势.
分布式结构就是将一个完整的系统,按照业务功能,拆分成一个个独立的子系统,在分 布式结构中,每个子系统就被称为“服务”。这些子系统能够独立运行在web容器中, 它们之间通过RPC方式通信。
举个例子,假设需要开发一个在线商城。按照微服务的思想,我们需要按照功能模块拆 分成多个独立的服务,如:用户服务、产品服务、订单服务、后台管理服务、数据分析 服务等等。这一个个服务都是一个个独立的项目,可以独立运行。如果服务之间有依赖 关系,那么通过
RPC方式调用。
分布式的好处:
系统之间的耦合度大大降低,可以独立开发、独立部署、独立测试,系统与系统之间的 边界非常明确,排错也变得相当容易,开发效率大大提升。
系统之间的耦合度降低,从而系统更易于扩展。我们可以针对性地扩展某些服务。假设 这个商城要搞一次大促,下单量可能会大大提升,因此我们可以针对性地提升订单系统、 产品系统的节点数量,而对于后台管理系统、数据分析系统而言,节点数量维持原有水 平即可。 服务的复用性更高。比如,当我们将用户系统作为单独的服务后,该公司所有的产品都 可以使用该系统作为用户系统,无需重复开发。
28. 阅读下面代码,回答问题.
# include
int su)n^ pad^ pAd; Sum = pad = 5;
pAd = ++sum^ pA , pad); 果斟 6 29. 变量a是一个64位有符号的整,初始值用16进制表示 为:0x7FFFFFFFFFFFFFFF;变量b是一个64位有符号的整数,初 始值用16进制表示为0x8000000000000000.则a+b的结果 用10进制表示为多少? -1 30. if [$2 -a $2 = \中-a 是什么意思? 并且 31. 已知 int 占个字节,unsigned char 占 1 个字节,unsigned int number=Oxffaabcdd;下 种方式 可以将number的 值变为 Oxffaacddd? A. *( (unsigned char*) (&number) + l)=0xcd; B. number = (number & OxffffiJOff) | OxOOcdOO; C. number = (number & 0xffee43dd) | Oxbbaacddd; D. number = (number & Oxffccbcff) + 0x1100; A,B,C 32. 模式串的长度是m,主串的长度是n(m 配的时间复杂度是? 0 (m+n) KMP字符串匹配时间复杂度一定是0(N)銭性 33.求O-n之间二进制内没有连续三个1的数的个数. #include int dp [100] [3]; int dfs (int len, int flag, bool limit; { if (flag == 3)return 0; if (len == 0) return 1; if (J limit&&dp [len] [flag] != T; return dp [len] [flag]; int maxx = limit ? v[len] : 1; int ent = 0; for (int i = 0; i <= maxx; i++)[ if (i == 0){ ent += dfs (lernl, 0, } else{ ent += dfs (lern 1, flag+1 , } } return limit ? ent : dp[len] [flag] = ent; } int solve(long long x){ memset (v, 0, sizeof (v)); int k = 0; while (x){ v[++k] = x % 2; x ?=1; } return df s (k, 0, true); } int main() { memset(dp, 1, sizeof(dp)); long long a; cin >> a; cout?solve (a) ?endl; return 0; - == v[len]): == v[len]); 34. C++ 智能指针 shared_ptr、weak ptr 的实现. Counter类 Counter 象的目地就是用来申请一个块内存来存引用计数。shareCount是SharedPtr 的引用计 数,weakCount是弱引用计数。 当shareCount为0时,删除X对象。 当 weakCount 为 0 同时 shareCount 为 0 时,删除 Count er*对象。 Counter实现如下: class Counter [ public: int shareCount - 0; int weakCount = 0; }; SharedPtr类 主要的成员函数包括: 默认构造函数 参数为T*的explicit单参数构造函数 参数为WeakPtr&的explicit单参数构造丞数 拷贝构造函数 拷贝赋值函数 析构函数 隐式类型转换操作符operator bool () operator -〉() operator * () ShazedPtr实现如下: template { public: friend class WeakPtr :m_pResource(nullptr) , m_pCounter(new Count er()) [ m_pCount er\ explicit SharedPtr(T* pResource = nullptr)