- 博客(9)
- 收藏
- 关注
原创 字符串拷贝函数的安全问题
显然,这些检查会带来更多开销,而且最重要的,即使有这些检查也不能完全保证这个赋值就是安全的。如果传递的参数 max大于了dest缓冲区的长度,照样会出现缓冲区的溢出。但是末尾加0真的是我们预期的行为吗,我们只是想copy一个字符串,在目的字符串末尾加0会不会超出使用者的预期,导致编码结果与程序员预期不一样?这个安全函数,会对两个缓冲区的大小,以及各自指针指向的位置是否合法、是否会产生重叠等进行检查。由于不知道dst的长度,一旦dst < src,就会导致缓冲区溢出。很遗憾,这个好像也不太安全。
2024-07-29 18:03:56 286
原创 c++ 网络编程一
这个函数在网上有非常多的争议,使人根本分不清谁对设错,好像谁说的都有一点道理。fd是文件描述符,flags标志位一般置为0,这两个我们先不管。返回成功是否说明数据一定被对方接收到了?网络编程的知识很多,这一节我只想聊聊。是应用层定义要发送的数据长度,这些问题会在后续更新。
2024-05-29 17:57:50 126
原创 c++在循环中删除容器中的元素造成的崩溃
以上代码遍历map< int,int>中的元素, 如果值等于5或8则删除。但运行会导致无法预料的错误,可能会crash。因为map.erase(it) 删除了迭代器,此时这个迭代器所指向的地方无效。
2024-05-27 16:51:52 216
原创 c++多线程四
如果不使用互斥锁,线程1打印了一个字符,休眠后执行线程2,线程2打印一个字符,这样就不能完整的打印线程1和线程2的字符串,打印出的字符串是混乱的。如果使用了互斥锁保护2个线程共享的打印函数printer(),线程1拿到互斥锁后执行printer()打印函数打印一个字符,之后休眠1秒,这是切换到线程2,因为互斥锁已经被线程1上锁,线程2将阻塞,直到线程1的字符串打印完整后主动释放互斥锁后线程2才会被唤醒。这是本章主要讨论的东西。互斥锁的含义不再具体解释,这里只描述如何在pthread下使用互斥锁。
2024-02-23 17:18:18 527
原创 c++多线程三
POSIX Threads简称Pthreads,Pthreads是线程的POSIX标准,该标准定义了一套C程序语言的类型、函数和常量。定义在pthread.h头文件和一个线程库里,大约有100个API,所有API都带有"pthread_"前缀,可以分为4大类:线程管理(Threadmanagement):包括线程创建(creating)、分离(detaching)、连接(joining)及设置和查询线程属性的函数等。互斥锁(Mutex):"mutual。
2024-02-23 16:04:01 1730
原创 c++多线程二
线程同步是指在多线程编程中,为了保证多个线程按照某种特定的方式正确、有序地执行,需要进行线程间的协作与同步。在多线程编程中,当多个线程共享同一份资源时,由于线程的执行顺序是不确定的,因此会存在一些并发问题,如死锁、竞态条件、资源争用等问题。为了避免这些问题,需要对线程进行同步。线程同步实际上就是通过线程之间的协作,使得线程能够按照一定的顺序来访问共享资源,从而避免并发问题的发生。常用的线程同步机制有互斥锁、信号量、条件变量等。
2024-01-10 11:23:21 705
原创 c++多线程一
每个进程中访问临界资源的那段代码称为临界区(Critical Section)(临界资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问。在C++中,EnterCriticalSection函数用于进入一个临界区,并锁定该临界区,防止其他线程进入临界区。的初始化后才能使用,而且必须确保所有线程中的任何试图访问此共享资源的代码都处在此临界区的保护之下。如果有这临界保护,这要么为全a,要么为全c。
2024-01-09 17:08:36 332
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人