做了个小程序,用来验证Interlocked的效果:
上图分别是注释掉“标记1”和“标记2”后的截图,和取消注释后的截图,下面是代码:
#include <windows.h>
#include <stdio.h>
#include <float.h>
#include <process.h>
#include <conio.h>
#include <iostream>
#include <tchar.h>
using namespace std;
LONG g = 0, flag = 0, T = 1, F = 0;
void threadfun1(void *pNull);
void threadfun2(void *pNull);
int main()
{
TCHAR szBuf[10240] = {0};// = TEXT("Thread Interlocked Experiment BEGIN!!!\n");
HANDLE harr[2];
harr[0] = (HANDLE)_beginthread(threadfun1, 0, szBuf);
harr[1] = (HANDLE)_beginthread(threadfun2, 0, szBuf);
// 如果不等两个线程结束,则极有可能主函数结束了,而那两个线程没结束!;
// 也就是说,屏幕上将无任何输出!;
WaitForMultipleObjects(2, harr, TRUE, INFINITE);
_tprintf(szBuf);
printf("%d\n", g);
getch();
return 0;
}
void threadfun1(void *pNull)
{
// 标记1
while (InterlockedExchange(&flag, T) == T)
;
g++;
int i, len, j;
TCHAR *pStr = (TCHAR*)pNull;
for (i = 0; i < 10; ++i)
{
for (j = 0; j < 10; ++j)
{
len = lstrlen(pStr);
pStr[len++] = '1';
pStr[len] = 0;
}
len = lstrlen(pStr);
pStr[len++] = '\n';
pStr[len] = 0;
Sleep(10); // 这样使实验的效果更明显;
}
InterlockedExchange(&flag, F);
}
void threadfun2(void *pNull)
{
// 标记2
while(InterlockedExchange(&flag, T) == T)
;
g++;
int i, len, j;
TCHAR *pStr = (TCHAR*)pNull;
for (i = 0; i < 10; ++i)
{
for (j = 0; j < 10; ++j)
{
len = lstrlen(pStr);
pStr[len++] = '2';
pStr[len] = 0;
}
len = lstrlen(pStr);
pStr[len++] = '\n';
pStr[len] = 0;
Sleep(10);
}
InterlockedExchange(&flag, F);
}
- 大小: 10.7 KB
- 大小: 11.2 KB
分享到:
相关推荐
线程同步在用户模式下是操作系统编程中的一个重要概念,它涉及到多线程程序设计时如何有效地协调线程间的执行顺序,以确保数据的一致性和避免竞态条件等问题。以下是对这个主题的详细解释: 线程同步是多线程环境下...
本文将围绕“C#多线程”中的一个重要概念——线程同步,结合“ThreadSynchronization.zip”压缩包中的示例代码进行深入探讨。 线程同步是指在多线程环境中控制不同线程对共享资源的访问,以避免数据不一致或竞争...
Throughout the chapter, various examples showcase the application of synchronization techniques, demonstrating how these mechanisms can be used in practice to solve concurrency issues and maintain ...
操作系统英文教学课件:Chapter 6 Process Synchronization.ppt
操作系统概念英文课件:Chapter 6 Process Synchronization (2).ppt
在现代操作系统中,每个进程都拥有自己的地址空间和一个控制线程。然而,在实际应用中,我们经常遇到需要在单个进程内执行多个并发任务的情况,并且这些任务需要访问相同进程的组件,比如数据结构、打开的文件描述符...
Adaptive pinning control of cluster synchronization in complex networks with Lurie-type nonlinear dynamics
CHAPTER 8 Thread Synchronization 259 CHAPTER 9 Locking, Performance, and NT6 Enhancements 301 CHAPTER 10 Advanced Thread Synchronization 335 CHAPTER 11 Interprocess Communication 379 CHAPTER 12 ...
部分同步是指在网络节点之间交互作用形成网络结构时,网络中的某些部分能够达到同步状态,而其余部分则未能同步。它是在研究网络动态时经常遇到的现象,特别是在处理复杂网络时。复杂网络广泛存在于自然界和社会系统...
### 用户识别与密文同步在语音信息隐藏中的应用 #### 摘要 本文探讨了在语音信息隐藏中实现用户快速识别以及密文同步的方法。为缩短建立连接和交换协议的时间,提出了一种快速交叉识别技术。为了提高通信的安全性...
### 线程同步(Thread Synchronization) #### 一、引言 线程同步是多线程编程中的一个重要概念,主要用于解决多个线程并发访问共享资源时可能出现的数据不一致问题。在Java等支持多线程的语言中,理解并正确实现...
《O-RAN Fronthaul Working Group Control, User and Synchronization Plane Specification》是O-RAN联盟发布的技术规范,主要关注O-RAN(开放无线接入网)的前传接口的控制、用户和同步平面的设计与实现。...
ch6-Process Synchronization-习题讲解.ppt