Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-具有固定数组(队列/缓冲区?)的类的线程安全实现(添加、删除、修改)_C#_Arrays_Multithreading_Concurrency_Thread Safety - Fatal编程技术网

C#-具有固定数组(队列/缓冲区?)的类的线程安全实现(添加、删除、修改)

C#-具有固定数组(队列/缓冲区?)的类的线程安全实现(添加、删除、修改),c#,arrays,multithreading,concurrency,thread-safety,C#,Arrays,Multithreading,Concurrency,Thread Safety,一般来说,我对编程、线程和线程安全同步都是新手,一直在阅读和搜索,发现了几十个类似的问题——但最终找不到任何有助于我解决问题的东西——或者我对该主题的知识缺乏,无法注意到/理解答案 我已经创建了一个包含3个数据字段(string、int、double)和1个方法的类(将用于计算新值-稍后将与所选筛选条件进行比较) 然后我希望我的主线程按照以下顺序执行操作: 将数据(3个文件)读取到选定的数据结构中。-让我们忽略这些 运行选定数量的线程(2请注意,C#中存在一些线程,应该对您有用 你应使用: Co

一般来说,我对编程、线程和线程安全同步都是新手,一直在阅读和搜索,发现了几十个类似的问题——但最终找不到任何有助于我解决问题的东西——或者我对该主题的知识缺乏,无法注意到/理解答案

我已经创建了一个包含3个数据字段(string、int、double)和1个方法的类(将用于计算新值-稍后将与所选筛选条件进行比较)

然后我希望我的主线程按照以下顺序执行操作:

  • 将数据(3个文件)读取到选定的数据结构中。-让我们忽略这些
  • 运行选定数量的线程(2请注意,C#中存在一些线程,应该对您有用

    你应使用:

    ConcurentDictionary<string, Computer>
    
    ConcurentDictionary
    
    如果您有计算机标识符。

    请注意,有些标识符存在于C#中,应该对您有用

    你应使用:

    ConcurentDictionary<string, Computer>
    
    ConcurentDictionary
    

    如果您有一个计算机标识符。

    由于您是多线程新手,关于您应该做什么的答案很简单:每次访问共享资源时。“访问”意味着读和写。“共享资源”指由多个线程同时访问的每个变量、字段或属性。使用同一个锁对象保护同一个变量。请尽快释放锁


    此建议不足以创建性能良好的应用程序,也不足以避免死锁,但至少您的数据不会被破坏。

    由于您是多线程新手,关于您应该做什么的答案很简单:每次访问共享资源时。“访问”意味着读和写。“共享资源”指由多个线程同时访问的每个变量、字段或属性。使用同一个锁对象保护同一个变量。尽快释放锁


    此建议不足以创建性能良好的应用程序,也不足以避免死锁,但至少您的数据不会被破坏。

    您不打算为此使用内置的线程安全集合有什么原因吗?在阅读您的问题后,它们似乎可以满足您的所有需要。此外,请尝试缩小范围问题归结为1个问题,而不是6个问题。这6个问题可能保证他们自己的完整答案,现在你冒着人们只回答其中几个问题的风险,然后在这里没有办法接受答案。这个问题有点难以理解,因为有这么多的要求,听起来像一个管道,如果是TPL数据流的话。尽管说实话很难从你的问题中找出你的解决方案,并且不认为这是一个问题XY@LasseVågsætherKarlsen是的,我不能使用内置的线程安全集合,必须特别使用有限大小的数组和“监控类”,它至少有两个方法:添加和删除(计算机类).此外,我再次表示歉意,并试图缩小范围,或至少听起来更简单一些-你说得对,不过-我最终会接受答案-任何回答都可以让我理解整个问题。此外,“线程安全”"不是一个定义良好的概念,您应该确保定义所需的线程安全功能。例如,数组本身是线程安全的,因为您不能损坏数组,使数组无法使用。但是,如果没有某种同步,很难对其内容进行理论。另一方面,字典另一方面,如果您从不同的线程向它写入,它本身很容易损坏。您不打算为此使用内置的线程安全集合有什么原因吗?在阅读您的问题后,它们似乎可以满足您的所有需要。此外,请试着将问题缩小为1个问题,而不是6个问题。这6个问题可能会让您感到不安ant提供了他们自己的完整答案,现在你冒着让人们只回答其中几个问题的风险,在这里没有办法接受答案。这个问题有点难理解,因为有这么多的需求,听起来像管道,如果是TPL数据流的话。尽管老实说,很难从你的问题中找出解决方案,并且不认为这是XY@LasseVågsætherKarlsen是的,我不能使用内置的线程安全集合,必须特别使用有限大小的数组和“监控类”,它至少有两个方法:添加和删除(计算机类).此外,我再次表示歉意,并试图缩小范围,或至少听起来更简单一些-你说得对,不过-我最终会接受答案-任何回答都可以帮助理解整个问题。此外,“线程安全”不是一个定义良好的概念,您应该确保定义所需的线程安全功能。例如,数组本身是线程安全的,因为您不能损坏数组,使数组无法使用。但是,如果没有某种同步,很难对其内容进行理论。另一方面,字典如果你从不同的线程向它写入数据,它本身很容易被破坏。是的,我知道-在这个任务中,我被要求不使用并发集合。@Blank_uuu你知道为什么你被要求不使用并发集合吗?例如,这真的有点像面试中要求你显示t的情况吗您能安全地编写多线程代码吗?同样,了解您为什么不能使用这些集合可能会给我们一些有关如何回答的信息。目前,您的问题最明显的答案是“使用内置的并发集合”.是的,我知道-在这项任务中,我被要求不要使用并发集合。@Blank\uuuu你知道为什么要求你不要使用并发集合吗?例如,这真的像int吗