`
zheyiw
  • 浏览: 997437 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

多线程与静态函数

    博客分类:
  • C#
阅读更多
最近项目用到很多的静态函数,所以想确定一下静态函数被多个线程同时调用的时候是否能实现并行
测试原理如下: 开多个现场, 传入参数如果参数是偶数,就在静态函数中堵塞线程5秒,如果参数是奇数就跳过. 最终根据返回参数可以判断静态变量在被多个函数同时调用时到底是串行执行还是并行执行
先说结论: 是并行的

测试代码如下:

private void simpleButton1_Click(object sender, EventArgs e)
{
	for (int i = 0; i < 5; i++)
	{
		//开启五个线程
		Thread thread1 = new Thread(ThreadA);
		thread1.Start((object)i);
	}
}

private void ThreadA(object a)
{
	int type = (int)a;
	ParallelTest(type);
	//更新界面
	BeginInvoke(new Del_RefreshRankingType(RefreshRankingType), type);
}

public static void ParallelTest(int type)
{
	if (type % 2 == 0)
	{
		//如果参数为偶数堵塞5秒
		Thread.Sleep(5000);
	}
}

public delegate void Del_RefreshRankingType(int type);

public void RefreshRankingType(int type)
{
	memoEdit1.Text = memoEdit1.Text + "\r\n" + "Thread: " + type;
}

最后得到的结果是:
Thread: 1
Thread: 3
Thread: 0
Thread: 2
Thread: 4

而且1,3线程是立即返回数据,0,2,4是五秒后
所以:
一个简单的静态函数,只包含一下局部变量,不涉及线程间参数时是并行访问的

分享到:
评论

相关推荐

    MulThreadclass.rar_AfxBeginThread_cwinthread_多线程 同步

    感觉多线程确实麻烦,线程间要处理好同步与通讯,如果用CWinThread好一点,直接是一个线程对象,如果用AfxBeginThread,那必须定个全局函数,或者写个静态函数,一般是传个this指针进去,然后再用这个指针调用本类...

    Android JNI多线程编程回调JAVA函数

    通过JNI接口静态注册的native方法去创建线程,同时提供native回调Java的方法。通过这个框架可以去实现线程监听某一个状态,然后回调Java的方法(如发消息去通知顶层,实现显示)

    Qt 多线程访问同一个变量

    1.Qt下,多线程使用互斥锁安全访问同一全局变量;2.源码中定义了ThreadA和ThreadB,定义变量后,依次调用函数start()来启动重写的run()函数

    c++多线程的创建挂起执行与销毁

    否者就失去了多线程的意义) DWORD WINAPI ThreadFun(LPVOID pthread) //线程入口函数 { lpthread temp=(lpthread)pthread;//参数强制转换为结构体类型 temp-&gt;progress-&gt;SetPos(temp-&gt;pos); //设置被传递过来的...

    CreateThread创建多线程与单线程比较

    第二种是启动多线程,不同模式下启动函数不同,mfc与API与WIN32下面注意点也是有区别的! VC启动一个新线程的三种方法,有需要的朋友可以参考下。 第一种AfxBeginThread() 用AfxBeginThread()函数来创建一个新...

    一种基于类的Java多线程程序数据竞争静态检测算法.pdf

    多线程并发程序的广泛使用引发了更多的数据竞争问题,竞争检测对于提高软件质量具有重要意义。将竞争静态检测和静态切片分析结合起来,提出了一种基于类的java数据竞争静态检测算法,该算法利用函数调用层次获得函数...

    多线程编程指南PDF

    多线程基础介绍.........................................................................................................................................15 定义多线程术语...................................

    C#多线程ThreadPool线程池详解

    ThreadPool静态类通过QueueUserWorkItem()方法将工作函数排入线程池; 每排入一个工作函数,就相当于请求创建一个线程; 线程池的作用: 1、线程池是为突然大量爆发的线程设计的,通过有限的几个固定线程为大量的...

    JAVA多线程并发下的单例模式应用

    单例模式应该是设计模式中比较简单的一个,也是非常常见的,但是在多线程并发的环境下使用却是不那么简单了,今天给大家分享一个我在开发过程中遇到的单例模式的应用。 首先我们先来看一下单例模式的定义: 一个类有...

    多线程编程指南(系统描述了线程标准 线程同步 多线程编程原则 等)

    1 多线程基础介绍15 定义多线程术语15 符合多线程标准16 多线程的益处17 提高应用程序的响应 17 有效使用多处理器17 改进程序结构17 占用较少的系统资源17 结合线程和RPC(远程过程调用)18 多线程概念18 并发性和...

    转载:已编译好的openssh库

    这是由于OpenSSL的静态函数库使用的是了VC的多线程DLL的Release版本,而我的程序使用了多线程静态链接的Release版本。 调整OpenSSL的静态函数库使用的库函数版本即可,调整过程如下: 编辑文件 ms\nt.mak,将...

    static 用法

    , 但为了限制全局变量/函数的作用域, 函数或变量前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。注意此时, 对于外部(全局)变量, ...

    Linux多线程服务端编程:使用muduo C++网络库

    1.1当析构函数遇到多线程. . . . . . . . . . . . . . . . .. . . . . . . . . . . 3 1.1.1线程安全的定义. . . . . . . . . . . . . . . . .. . . . . . . . . . . 4 1.1.2MutexLock 与MutexLockGuard. . . . . . ....

    JAVA 多线程

     一个进程可拥有多个并行的(concurrent)线程  一个进程中的线程共享相同的内存单元/内存地址空间à可以访问相同的变量和对象,而且它们从同一堆中分配对象à通信、数据交换、同步操作  由于线程间的通信是在...

    java 多线程单例模式详解

    单例设计模式: 1、构造函数私有 2、定义类型为本身类型的成员 3、类中提供一个公共的并且静态的获取本类实例的方法

    c# 程序设计英文课件

    c# 程序设计英文课件 内容覆盖: 变量、常量、变量的作用域 值类型变量和引用类型变量 类、类的构造函数、静态构造函数 引用变量的静态数据类型和动态数据类型 传值调用与传引用调用 ...多线程程序设计

    Linux系统编程之线程同步

    所以,互斥锁实质上是操作系统提供的一把“建议锁”(又称“协同锁”),建议程序中有多线程访问共享资源的时候使用该机制。但,并没有强制限定。 因此,即使有了mutex,如果有线程不按规则来访问数据,依然会造成...

    aardio桌面软件开发工具v30.0 支持COM动态静态接口+标准DLL组件.zip

    提供可视化开发环境,支持多线程开发。 支持用网页开发软件界面、可与HTML、JS无缝整合。 完美支持web自动化、轻松开发网站机器人。完美支持所有游戏辅 助工具技术。 一句代码即可实现CALL外部EXE函数。支持内存读写...

    E2EE支持库读写共享锁例程源码

    首先,这里需要讲一下,什么是多线程?。多线程就是在一个进程内,开启线程,多条线程可以做不同的事情,也可以做同一件事情,如果,多条线程做同一件事件。那么,他们就需要使用到共同的资源。比如,一个全局变量,或者全局...

Global site tag (gtag.js) - Google Analytics