社区
C#
帖子详情
线程问题
sunny906
2010-01-26 03:13:06
有三个不同的线程:A、B、C和一个实例化对象的方法:void InitObject();
这三个线程是同时执行的,顺序分别为C、A、B
每个线程执行的时候都要调用InitObject(),即每个线程都会实例化同一个对象,而且实例化的结果都是一样的
但我只想实例化一次,并且这三个线程必须都执行
请问有什么方法可以实现?有没有可能把这三个线程合并成一个,让合并后的线程去调用InitObject()?
...全文
291
21
打赏
收藏
线程问题
有三个不同的线程:A、B、C和一个实例化对象的方法:void InitObject(); 这三个线程是同时执行的,顺序分别为C、A、B 每个线程执行的时候都要调用InitObject(),即每个线程都会实例化同一个对象,而且实例化的结果都是一样的 但我只想实例化一次,并且这三个线程必须都执行 请问有什么方法可以实现?有没有可能把这三个线程合并成一个,让合并后的线程去调用InitObject()?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sunny906
2010-01-27
打赏
举报
回复
用单例模式后,对象保证了一个,但是方法还是被执行了多次
怎么样才能使方法也只被执行一次?
请教各位!
whitechololate
2010-01-27
打赏
举报
回复
单例模式,搜一下,很多的
sunny906
2010-01-27
打赏
举报
回复
顶
RFEZGC
2010-01-26
打赏
举报
回复
每日回帖
cqzs632
2010-01-26
打赏
举报
回复
帮顶~~呵呵
sunny906
2010-01-26
打赏
举报
回复
顶
sunny906
2010-01-26
打赏
举报
回复
再顶
sunny906
2010-01-26
打赏
举报
回复
顶一下
能不能两个线程只输出1、2、3、4、5
流氓兔
2010-01-26
打赏
举报
回复
[Quote=引用 4 楼 lianshaohua 的回复:]
引用楼主 sunny906 的回复:
有三个不同的线程:A、B、C和一个实例化对象的方法:void InitObject();
这三个线程是同时执行的,顺序分别为C、A、B
每个线程执行的时候都要调用InitObject(),即每个线程都会实例化同一个对象,而且实例化的结果都是一样的
但我只想实例化一次,并且这三个线程必须都执行
请问有什么方法可以实现?有没有可能把这三个线程合并成一个,让合并后的线程去调用InitObject()?
1、线程的执行顺序是不确定的,除非你自己硬性控制了,
2、用单例模式吧,但三个线程如果都要修改对象的话,要加锁,即:先lock(对象)再访问
[/Quote]
顶
sunny906
2010-01-26
打赏
举报
回复
在“
逍遥剑客的专栏 - CSDN博客
”里看到的一个例子:
public sealed class Singleton
{
Singleton()
{
}
public static Singleton Instance
{
get
{
return Nested.instance;
}
}
class Nested
{
internal static readonly Singleton instance;
static Nested()
{
instance = new Singleton();
}
}
private int num = 0;
/**//// <summary>
/// 增加
/// </summary>
public void Add()
{
num++;
Console.WriteLine("输出:" + num);
}
}
//--------------------------------------------------------------
class Program
{
public static void Print()
{
Singleton singleton = Singleton.Instance;
lock (singleton)
{
for (int i = 0; i < 5; i++)
{
singleton.Add();
}
}
}
static void Main(string[] args)
{
Thread threadFst = new Thread(new ThreadStart(Print));
threadFst.Name = "Fst";
Thread threadScd = new Thread(new ThreadStart(Print));
threadScd.Name = "Scd";
threadFst.Start();
threadScd.Start();
Console.ReadLine();
}
}
这段代码执行过后,输出的是1、2、3、4、5、6、7、8、9、10
单件模式不是在第一次使用这个对象的时候才对这个对象进行初始化吗?可为什么两个线程都执行了输出操作?
不太明白,请教各位
sunny906
2010-01-26
打赏
举报
回复
谢谢各位,我先看看
成都锦福工作室
2010-01-26
打赏
举报
回复
使用单例吧,提供全局访问点,大致代码如下:
Class SingletonClass
{
private static volatile SingletonClass sc;
private static object syncLock = new object();
Public static SingletonClass GetSc()
{
if (sc == null)
{
lock (syncLock)
{
if (sc == null)
{
sc = new SingletonClass();
}
}
}
return sc;
}
}
阿非
2010-01-26
打赏
举报
回复
http://www.yoda.arachsys.com/csharp/singleton.html
wwwwpig
2010-01-26
打赏
举报
回复
参考一下吧
using System;
namespace SigletonPattern.Sigleton
{
/**//// <summary>
/// 功能:在C#用双重锁定实现单件模式
/// 编写:Terrylee
/// 日期:2005年12月06日
/// </summary>
public class DoubLockSigleton
{
//volatile 表示编译器不能自动优化调试语句.(避免调整语句位置和顺序导致初始化时间点不正确.sky)
private static volatile DoubLockSigleton instance;
/**//// <summary>
/// 辅助锁对象,本身没有意义
/// </summary>
private static object syncRoot = new Object();
/**//// <summary>
/// 构造方法改为Private
/// </summary>
private DoubLockSigleton()
{
}
public static DoubLockSigleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new DoubLockSigleton();
}
}
return instance;
}
}
}
}
nicetfox
2010-01-26
打赏
举报
回复
有没有实例
sunny906
2010-01-26
打赏
举报
回复
没用过单例模式,能不能通俗地解释一下
谢谢
sunny906
2010-01-26
打赏
举报
回复
能不能Example一下,谢谢!
ztenv
2010-01-26
打赏
举报
回复
[Quote=引用楼主 sunny906 的回复:]
有三个不同的线程:A、B、C和一个实例化对象的方法:void InitObject();
这三个线程是同时执行的,顺序分别为C、A、B
每个线程执行的时候都要调用InitObject(),即每个线程都会实例化同一个对象,而且实例化的结果都是一样的
但我只想实例化一次,并且这三个线程必须都执行
请问有什么方法可以实现?有没有可能把这三个线程合并成一个,让合并后的线程去调用InitObject()?
[/Quote]
1、线程的执行顺序是不确定的,除非你自己硬性控制了,
2、用单例模式吧,但三个线程如果都要修改对象的话,要加锁,即:先lock(对象)再访问
白头老汉
2010-01-26
打赏
举报
回复
把构造函数写成静态的不就可以了么?
辉太郎
2010-01-26
打赏
举报
回复
设计模式中的单件模式可以解决你的这个问题,只对同一个对象实例化一遍,保证只有一个对象的实例!
加载更多回复(1)
秒杀多
线程
第十六篇 多
线程
十大经典案例之一 双
线程
读写队列数据
在《秒杀多
线程
系列》的前十五篇中介绍多
线程
的相关概念,多
线程
同步互斥
问题
《秒杀多
线程
第四篇一个经典的多
线程
同步
问题
》及解决多
线程
同步互斥的常用方法——关键段、事件、互斥量、信号量、读写锁。为了让大家...
POSIX多
线程
程序设计.pdf
此外,本书还讨论了调度的
问题
,并给出了避免错误和提高性能等
问题
的有价值的建议。本书使用了大量注释过后 实例来解释实际的概念,并包括Pthreads的简单索引和对标准化的展望。 《POSIX多
线程
程序设计》适合有经验...
WPF多
线程
演示
综上所述,WPF多
线程
演示项目可能涵盖了如何在WPF应用中正确使用多
线程
、避免阻塞UI、利用BackgroundWorker、Task Parallel Library或异步编程模型来实现后台任务,以及处理
线程
安全和异常等
问题
。这些知识点对于...
下载 多
线程
编程技术开发资料 高清完整PDF版
死锁是多
线程
编程中经常遇到的一个
问题
,它指的是两个或多个
线程
互相等待对方释放锁,从而导致进程永远阻塞的情况。避免死锁需要程序员在设计程序时仔细规划锁的使用和
线程
间的交互。 8. 并发与并行 并发...
多
线程
编程技术开发资料.pdf
标题与描述均提到了“多
线程
编程技术开发资料”,这表明文档主要聚焦于多
线程
编程技术的探讨...然而,多
线程
编程也带来了诸如数据同步、
线程
安全等
问题
,需要开发者掌握相应的理论知识和实践经验,才能充分发挥其优势。
C#
111,120
社区成员
642,537
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章