c#多线程什么时候用多线程要同步

请求大神教一下有关C#线程同步的问题【c#吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:115,828贴子:
请求大神教一下有关C#线程同步的问题收藏
如题,现在我做了一个数据写入的程序(把1-9999写入到.txt中),然后我每按一次button就触发写入一次,如果我按3次,就分别写入3次,现在我遇到的问题就是,我按快了,就会出现写入混乱的问题,求各位大神支支招
2#正解,1 在写入时设置lock。2 你也可以直接使用线程安全的泛型集合,BlockingCollection&T& 来替换你原本的写入集合。上面2个方法都可以
对了,补充一下,每次写入,我都需要创建一个新的.txt文件再写入1-9999
队列。排好队 一个一个来! 不能插队
public class LogHelper
public static readonly string logPath = HttpContext.Current.Request.MapPath(WebConfigurationManager.AppSettings[&logPath&]);
private static readonly object writeFile = new object();
public LogHelper() { }
/// &summary&
/// 在本地写入错误日志
/// &/summary&
/// &param name=&exception&&&/param&
public static void WriteLog(string debugstr)
lock (writeFile)
FileStream fs =
StreamWriter sw =
string filename = DateTime.Now.ToString(&yyyy-MM-dd&) + &.txt&;
//服务器中日志目录
if (!Directory.Exists(logPath))
Directory.CreateDirectory(logPath);
fs = new FileStream(logPath + &/& + filename, System.IO.FileMode.Append, System.IO.FileAccess.Write);
sw = new StreamWriter(fs, Encoding.UTF8);
sw.WriteLine(string.Format(&====={0}-----\r\n{1}\r\n\r\n&, DateTime.Now.ToString(),debugstr));
if (sw != null)
sw.Flush();
sw.Dispose();
if (fs != null)
fs.Flush();
fs.Dispose();
interlocked性能更高,可以了解下
登录百度帐号推荐应用C# 多线程同步和线程通信_博客园
当前位置: >
>C# 多线程同步和线程通信
C# 多线程同步和线程通信
& 作者:higirle & 来源: 博客园-jessy &
多线程通信
1. 当线程之间有先后的依赖关系时,属于线程之间的通信问题。也就是后一个线程要等待别的一个或多个线程全部完成,才能开始下一步的工作。可以使用:
WaitHandle Class  WaitHandle类作为基类来使用的,它允许多个等待操作。这个类封装了win32的同步处理方法。WaitHandle对象通知其他的线程它需要对资源排他性的访问,其他的线程必须等待,直到WaitHandle不再使用资源和等待句柄没有被使用。下面是从它继承来的几个类:    AutoResetEvent:Notifies a waiting thread that an event has occurred. This class cannot be inherited.这个类可以通知一个或多个线程发生事件。当一个等待线程得到释放时,它将状态转换为signaled。用set方法使它的实例状态变为signaled。但是一旦等待的线程被通知时间变为signaled,它的转台将自动的变为nonsignaled。如果没有线程侦听事件,转台将保持为signaled。此类不能被继承。
http://msdn.microsoft.com/en-us/library/system.threading.autoresetevent(v=vs.110).aspx
   ManualResetEvent:Notifies one or more waiting threads that an event has occurred. This class cannot be inherited.。这个类也用来通知一个或多个线程事件发生了。它的状态可以手动的被设置和重置。手动重置时间将保持signaled状态直到ManualResetEvent.Reset设置其状态为nonsignaled,或保持状态为nonsignaled直到ManualResetEvent.Set设置其状态为signaled。这个类不能被继承。http://msdn.microsoft.com/en-us/library/system.threading.manualresetevent(v=vs.110).aspx
  这些类定义了一些信号机制使得对资源排他性访问的占有和释放。他们有两种状态:signaled 和 nonsignaled。Signaled状态的等待句柄不属于任何线程,除非是nonsignaled状态。拥有等待句柄的线程不再使用等待句柄时用set方法,其他的线程可以调用Reset方法来改变状态或者任意一个WaitHandle方法要求拥有等待句柄,这些方法见下面:  WaitAll:等待指定数组中的所有元素收到信号。http://msdn.microsoft.com/en-us/library/system.threading.waithandle(v=vs.110).aspx
  WaitAny:等待指定数组中的任一元素收到信号。  WaitOne:当在派生类中重写时,阻塞当前线程,直到当前的 WaitHandle 收到信号。  这些wait方法阻塞线程直到一个或者更多的同步对象收到信号。  WaitHandle对象封装等待对共享资源的独占访问权的操作系统特定的对象无论是收管代码还是非受管此文来自: 马开东博客
转载请注明出处 网址:
相关阅读:
来源:(微信/QQ:,微信公众号:makaidong-com) &&&&&& 欢迎分享本文,转载请保留出处!
&&&&&& 【原文阅读】:
上一篇:没有了
【相关文章】
每日最新文章
每日最热文章
本周最热文章
本月最热文章
本年最热文章
Powered by
Copyright &
www.makaidong.com, All Rights Reserved一个简单的C#多线程间同步的例子_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
一个简单的C#多线程间同步的例子
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢&>&C#实现多线程同步并发操作
C#实现多线程同步并发操作
上传大小:2KB
C#实现多线程同步并发操作,在线源码,供你下载学习
综合评分:4(10位用户评分)
下载个数:
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有5条
还不错 有用 Mark
一般般,不是很值得下载
没有解决我的问题
xiaolongdehao
综合评分:
积分/C币:3
综合评分:
积分/C币:3
综合评分:
积分/C币:3
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
C#实现多线程同步并发操作
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
(仅够下载10个资源)
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
xiaolongdehao
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
C#实现多线程同步并发操作C#同步线程详细概述 | 软件开发
C#同步线程详细概述
C#语言有很多值得学习的地方,这里我们主要介绍C#同步线程,包括介绍lock声明和Thread.Join方法等方面。
C#同步线程
在C#同步线程方面,C#提供了几种方法。在上述计算平方的例子中,需要与执行计算的C#同步线程,以便等待它执行完并且得到结果。另一个例子是,如果在其它线程中排序一个数组,那么在使用该数组前,必须等待该处理完成。为了实现同步,C#提供了lock声明和Thread.Join方法。
lock声明public&void&CalcSquare1() &{ &lock(&typeof(SquareClass)) &{ &Square&=&Value&*&V &} &}&
lock可以得到一个对象引用的唯一锁,使用时只要将该对象传送给lock就行了。通过这个唯一锁,可以确保多个线程不会访问共享的数据或者在多个线程上执行的代码。要得到一个锁,可以使用与每个类关联的System.Type对象。System.Type对象可以通过使用typeof运算得到,如表7所示。
Thread.Join方法private&void&button1_Click(object&sender,&System.EventArgs&e) &{ &SquareClass&oSquare&=new&SquareClass(); &t2&=&new&Thread(new&ThreadStart(oSquare.CalcSquare)); &oSquare.Value&=&30; &t2.Start(); &if(&t2.Join&(500)&) &{ &MessageBox.Show(oSquare.Square.ToString&()); &} &}&
Thread.Join方法可以等待一个特定的时间,直到一个线程完成。如果该线程在指定的时间内完成了,Thread.Join将返回True,否则它返回False。在上述平方的例子中,如果不想使用触发事件的方法,可以调用Thread.Join的方法来确定计算是否完成了。以上介绍C#同步线程。}

我要回帖

更多关于 什么时候需要多线程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信