c语言线程不安全错误定位,C语言中的线程安全可破坏事件触发类#

最近,我被要求实现一个类作为选择过程的一部分。我按要求做了这个节目。但是,我考试不及格。我真的很想知道我的解决方案出了什么问题。任何帮助都非常感谢。问题和我的解决方案如下

实现一个线程安全类,该类在构造过程中每秒触发一个事件。需要有一个函数来查找经过的秒数。这个类必须实现IDisposable,调用dispose后对seconds elapsed函数的任何调用都应该失败。

我的解决方案:

namespace TimeCounter

{

public delegate void SecondsElapsedHandler(object o, EventArgs e);

///

/// Summary description for SecondCounter

///

public class SecondCounter : IDisposable

{

private volatile int nSecondsElapsed;

Timer myTimer;

private readonly object EventLock = new object();

private SecondsElapsedHandler secondsHandler;

public SecondCounter()

{

nSecondsElapsed = 0;

myTimer = new Timer();

myTimer.Elapsed += new ElapsedEventHandler(OneSecondElapsed);

myTimer.Interval = 1000;

myTimer.AutoReset = false;

myTimer.Start();

}

public void OneSecondElapsed(object source, ElapsedEventArgs e)

{

try

{

SecondsElapsedHandler handlerCopy;

lock (EventLock)

{

handlerCopy = secondsHandler;

nSecondsElapsed++;

}

if (secondsHandler != null)

{

secondsHandler(this, e);

}

}

catch (Exception exp)

{

Console.WriteLine("Exception thrown from SecondCounter OneSecondElapsed " + exp.Message);

}

finally

{

if (myTimer != null)

{

myTimer.Enabled = true;

}

}

}

public event SecondsElapsedHandler AnotherSecondElapsed

{

add

{

lock (EventLock)

{

secondsHandler += value;

}

}

remove

{

lock (EventLock)

{

secondsHandler -= value;

}

}

}

public int SecondsElapsed()

{

if (this.IsDisposed)

{

throw new ObjectDisposedException("SecondCounter");

}

return nSecondsElapsed;

}

private bool IsDisposed = false;

public void Dispose()

{

Dispose(true);

GC.SuppressFinalize(this);

}

private void Dispose(bool Disposing)

{

if (!IsDisposed)

{

if (Disposing)

{

}

if (myTimer != null)

{

myTimer.Dispose();

}

}

secondsHandler = null;

IsDisposed = true;

}

~SecondCounter()

{

Dispose(false);

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504530.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode笔记】448. 找到所有不存在的数(Java、原地)

文章目录题目描述思路 & 代码题目描述 说实话,第一眼看题让我想到那道“往1 ~ 1024中加入一个数,用中学生也会的方法找到这个数"(答案是 (1024! x) - 1024! )如果没有时空复杂度限制的话,用哈希…

c语言中标识符和关键字,C语言(三) C 标识符和关键字

一.标识符1.标识符的作用:C 标识符是用来标识变量、函数,或任何其他用户自定义项目的名称2.标识符的规范:一个标识符只能以字母 A-Z 或 a-z 或下划线 _ 开始 后跟零个或多个字母、下划线和数字(0-9),第二位开始也只能用 A-Z…

【LeetCode笔记】146. LRU缓存机制(Java、双向链表、哈希表)

文章目录题目描述思路 & 代码LinkedHashMap 的写法题目描述 大名鼎鼎的超高频面试题太感动,在这道题上花了太多时间了,今天终于补上博客了TvT 思路 & 代码 结构用的是:双向链表 哈希表。可以满足O(1)时间复杂度put()&#xff1a…

c语言random函数在vc,C++ 中随机函数random函数的使用方法

C 中随机函数random函数的使用方法一、random函数不是ANSI C标准,不能在gcc,vc等编译器下编译通过。 可改用C下的rand函数来实现。1、C标准函数库提供一随机数生成器rand,返回0-RAND_MAX之间均匀分布的伪随机整数。 RAND_MAX必须至少为32767。…

计算思维c语言软件,C语言编程入门与计算思维

课程概况This specialization is designed to let you explore computational thinking and beginning C programming topics, applying those concepts to develop solutions to a variety of practical problems.The first course assumes no programming experience, and th…

simulink和c语言开发,Simulink之嵌入式C代码生成-应用层和底层的接口

今天给大家带来的仍然是基于MBD的嵌入式代码生成,主要把应用层和底层接口之间的代码生成配置说一下。本周末会更新功能安全相关,欢迎大家留言交流!作为一个总是用C写代码的人来说,第一次接触到基于MBD的代码生成的时候就迫不及待的…

【LeetCode笔记】215. 数组中的第K个最大元素(Java、快排、堆排、并发快排)

文章目录题目描述思路 & 代码快排基于 Fork / Join 的并发快排针对 topK 的快排优化堆排基本堆排结合题目的堆排二刷题目描述 大名鼎鼎的TOP K,主要考察排序快排 & 堆排 思路 & 代码 快排 没啥好说的,就是快排结束后,返回倒…

c语言中怎么画直线,ps如何画直线 【操作流程】

大家都知道电脑使用起来非常方便,但遇见ps如何画直线的时候就非常头疼了,如果你是第一次遇到ps如何画直线,怎么样才能快速解决ps如何画直线带来的烦恼呢?小编为大家收集了很多关于ps如何画直线问题的解决方法,下面请看…

【LeetCode笔记】470. 用Rand7()实现Rand10()(Java、概率)

文章目录题目描述代码 & 思路更新版三刷 - 极简版题目描述 貌似是比较高频的面试题目啊,有学概率论内味了(讲道理我概率论学得不好) 代码 & 思路 先用Rand7实现RandN(N > 10),类似进制&…

【纠错记录】本地FTP服务器无法被外部连接

问题描述 在本地主机开了个FTP服务器,本机可以正常访问,但是外部主机不能访问FTP服务器 解决方法 ① 一开始以为是服务端Xlight FTP的问题,检查权限并没有发现问题 ② 接着考虑到有没有可能是客户端Flash FXP的问题,于是尝试直…

双线性插值算法c 语言实现,双线性插值 - CristianoC的个人空间 - OSCHINA - 中文开源技术交流社区...

前言最近在学习LBP,其中的圆形LBP特征由于计算的值可能不是整数,即计算出来的点不在图像上,我们要使用计算出来的点的插值点。目的的插值方法有很多,Opencv使用的是双线性插值,今天就来介绍一下双线性插值。概述先给大…

android 访问服务器josn文件,Android客户端对服务器回来的json文件进行解析

Android客户端对服务器返回的json文件进行解析和解析XML的方式大同小异,只有解析方式存在区别:/*** 解析服务器返回来的json数据* param content* return* throws Exception*/private static List parseJson(String content) throws Exception {List videoList new…

【LeetCode笔记】543. 二叉树的直径(Java、dfs、二叉树)

文章目录题目描述思路 & 代码题目描述 思路 & 代码 由这个结论考虑:直径中一定有一个父结点,那么当前直径长度就是: 当前父结点的左子树深度 右子树深度那么,只要遍历所有结点的最长直径值即可流程:在找每一…

【LeetCode笔记】461. 汉明距离(Java、位运算)

文章目录题目描述思路 & 代码更新版题目描述 既然是二进制,那就十有八九用位运算符既然是不同,那肯定用异或 思路 & 代码 两种方法,总体来说都是处理异或值方法一,转换成字符串,再遍历(会慢一点…

android 启动服务同时传递数据,Android Studio开发基础之起动Service,并通过从Activity向Service传递数据...

Android Studio开发基础之启动Service,并通过从Activity向Service传递数据本实例演示启动Service,并通过从Activity向Service传递数据,新建一个Service,并敲如下代码:package com.example.lhb.startservice;import and…

android 自定义桌面图标大小设置,手机桌面图标尺寸可以改?OriginOS重新定义个性化...

原标题:手机桌面图标尺寸可以改?OriginOS重新定义个性化随着安卓定制化系统同质化情况的加重,越来越多的终端厂商开始探索一场新的变革。深耕手机领域的vivo,自然也察觉到了这一点。经过不断地努力和尝试之后,vivo终于…

【LeetCode笔记】347. 前K个高频元素(Java、优先队列、小顶堆、HashMap)

文章目录题目描述思路 & 代码更新版:引入 stream 流 Lambda题目描述 时间复杂度小于O(n*logn),否则直接sort,再遍历就很轻松。很有学习价值的题目,第一次使用了优先队列PriorityQueue。 思路 & 代码 首先遍历数组&am…

signature=c0b9be9cdeb0a9e14dbbc8edc1d4c0e5,NRZ-PM-QPSK 16

摘要:We present a set of experiments of 16 100 Gb/s (1.6 Tb/s) coherent wavelength-division-multiplexing nonreturn-to-zero polarization-multiplexed quadrature phase-shift-keying transmission over installed standard single-mode fiber, probing dif…

CentOS 7.9 vmware workstation安装

https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Everything-2009.iso VMWare workstation 可以自动化安装这个版本的Linux,节省我很多时间。

【LeetCode笔记】240. 搜索二维矩阵II 剑指 Offer 04 二维数组中的查找(Java、指针)

文章目录题目描述思路 & 代码更新版题目描述 两道题一样的有序 搜索,明摆着二分查找但是比较懒…选取了题解里的指针做法 思路 & 代码 时间复杂度O(m n),原理 & 思路 & 证明可见代码注释。代码很简单,主要是弄明白正确…