关于多线程不理解的地方

hMutex=CreateMutex(NULL, FALSE, NULL);
unsigned WINAPI threadInc(void * arg)
{
    int i;
    WaitForSingleObject(hMutex, INFINITE);
    for(i=0; i<500000; i++)
        num+=1;
    ReleaseMutex(hMutex);
    return 0;
}
unsigned WINAPI threadDes(void * arg)
{
    int i;
    WaitForSingleObject(hMutex, INFINITE);
    for(i=0; i<500000; i++)
        num-=1;
    ReleaseMutex(hMutex);
    return 0;
}
关于多线程有几个问题要问,当执行线程A时,首先hMutex变为已通知,然后执行下面的代码,
然后释放hmutex,然后随机执行线程B,等待hmutex变为已通知,然后执行for循环,
但是,假设执行for循环只执行了一半,这个时候会不会跳到线程A呢?
毕竟此时此刻hmutex也处于已通知状态,
难道是waitforsingeleobject会将hmutex修改为未通知状态吗?

WaitForSingleObject
当没有其他线程占用锁时,自己占用;当有其他线程占用锁时,阻塞,直到没有占用
ReleaseMutex解除占用

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/879604
  • 这篇博客也不错, 你可以看下编写串口通信的要注意的地方
  • 除此之外, 这篇博客: 完全背包的两种写法中的 背包九讲地址: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • file://C:\Users\PHC\AppData\Local\Packages\903DB504.QQ_a99ra4d2cbcxa\LocalState\User\1021861128\NetworkFile\背包问题九讲_2.0.pdf

  • 您还可以看一下 贺利坚老师的汇编语言程序设计课程中的 内存的读写与地址空间小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    多线程是指在一个程序中同时运行多个线程,每个线程都是独立的执行部分程序。每个线程拥有自己的指令、程序计数器、栈和局部变量等,但共享程序的数据内存和全局变量。多线程编程允许同时执行多个线程,从而在一定程度上提高程序的执行效率和性能。下面是多线程编程的优缺点:

    优点: 1. 提高程序的执行效率和性能,通过同时处理多个任务来降低CPU的闲置率。 2. 提高程序的吞吐量,能够在同一时间内处理更多的请求。 3. 可以提高程序的响应速度,即使有一个线程堵塞了,其他线程仍然可以正常运行。 4. 不必等待一个线程的完成再启动另一个线程,提高程序的并发性和并行性。

    缺点: 1. 多线程编程需要考虑线程同步和互斥的问题,增加了程序的复杂度。 2. 线程之间的切换也会带来一定的开销,如果线程太多可能会降低程序的执行效率。 3. 多线程编程可能会导致死锁和竞态条件的出现,需要仔细考虑和处理。 4. 程序员需要仔细编写代码,需要花费更多的时间和精力来进行调试和维护。

    需要注意以下问题: 1. 线程同步:多个线程访问同一个共享资源时可能导致数据的混乱和不一致,需要使用互斥锁或者信号量来保证数据的一致性。 2. 线程安全:需要考虑并发访问时的线程安全问题,避免数据竞争和死锁的出现。 3. 避免资源浪费:需要考虑线程的创建、销毁和切换的开销,避免过多的资源浪费和降低程序的效率。 4. 处理异常:由于多线程带来的程序并发性,会在代码执行过程中遇到各种异常情况,需要编写程序处理这些异常情况,避免程序崩溃和数据的不一致性。