只是不知道该买哪一个,Unlock和exit是什么意思,时

本文的目的是比较以上几种结束程序的方式的区别并分析其原理。

我们的目标是察看两种结束方式有什么不同

从结果上我们可以看出来,采用return来结束进程可以正确的析构全局和局部对象而采用exit是什么意思()来结束进程时全局对象可以正确析构,但局部对象没有正确析构采用exit是什么意思Process(0)结束时全局和局部对象都没有正确析构。

为什么会出现这样的情况呢
《Windows核心编程》中我们可以得到以下解释:
'当主线程的进入点函数(WinMain、wWinMain、main或wmain)返回時,它将返回给C/C++运行期启动代码它能够正确地清楚该进程使用的所有C运行期资源。当C运行期资源被释放之后C运行期启动代码就显式的調用exit是什么意思Process,并将进入点函数返回的值传递给它'

可见return 0上调用了局部对象t_2的析构函数。

从分析过程我们可以得出以下结论。

  • 先析构main函数内的局部对象

  • 返回至调用main的函数。

  • 调用exit是什么意思函数由exit是什么意思函数调用doexit是什么意思函数,在doexit是什么意思函数中完成对全局對象的析构

所以,exit是什么意思Process不负责任何对象的析构exit是什么意思只负责析构全局对象,return 0可以析构局部对象并调用exit是什么意思因此能析构全部对象。

    • lck完成了加锁所有使用同一个条件变量的线程必须在wait函数中使用同一个unique_lock。该wait函数内部会自动调用lck.unlock()对互斥锁解锁使得其他被阻塞在互斥锁上的线程恢复執行。使用本函数被阻塞的当前线程在获得通知(notified通过别的线程调用 notify_*系列的函数)而被唤醒后wait()函数恢复执行并自动调用lck.lock()对互斥锁加锁

    • pred);帶条件的被阻塞。wait函数设置了谓词(Predicate)只有当pred条件为false时调用该wait函数才会阻塞当前线程,并且在收到其他线程的通知后只有当pred为true时才会被解除阻塞因此,等效于while (!pred()) wait(lck);

  1. 一般情况下我们使用全局函数或者类的静态函数作为线程函数入口;但是以上2者都不能访问类的非静态成员变量。
    使用类的成员函数作为线程入口函数。使该线程入口函数能够访问类的成员变量

多个生产者和多个生产者的问題。生产者不断的向仓库放入产品消费者不断的从仓库取出产品,仓库的容量是有限的因此,当仓库处于满状态时生产者必须等待消费者取出 1 个或多个产品后才能继续生产;同理,当仓库处于空状态时消费者必须等待生产者将产品放入仓库后才能消费(取出)产品。

使用数组模拟仓库需要记录下一次生产和消费在数组中的位置。
用生产和消费在数组中的位置判断仓库是否为空或者为满:

当仓库满時阻塞生产者;当一个消费行为后,仓库非满唤醒生产者;
当仓库空时,阻塞消费者;当一个生产行为后仓库非空,唤醒消费者;
洇此需要引入仓库非满条件变量仓库非空条件变量

由于生产和消费行为都会修改数据因此两者操作必须互斥,需引入生产消费互斥锁
当我们要生产(或消费)一定数量的产品时,需要计数判断是否已经完成工作;多个生产者进行生产时都会对生产的计数变量进荇修改,因此需引入生产计数互斥锁消费计数互斥锁保证同时只有一个生产(或消费)进程对计数变量进行修改。


我要回帖

更多关于 exit是什么意思 的文章

 

随机推荐