如果在不同线程中使用同一个对象,DataFlow 对象是否需要锁定

问题描述 投票:0回答:1

我在不同的线程中使用相同的数据流对象。 是否必须在数据流对象上使用锁,或者对象是否自动线程安全?
例如:

// Dataflow object defined
ITargetBlock<FileQueueItem> producerChange = new BufferBlock<FileQueueItem>();

TransformBlock<FileQueueItem, FileQueueItem> transformBlock = new TransformBlock<FileQueueItem, FileQueueItem>(
            f => 
            {/*...*/});

ActionBlock<FileQueueItem> actionBlock = new ActionBlock<FileQueueItem>(f=>
            {/*...*/});

// DataFlow objects linked
producerChange .LinkTo(transformBlock );
transformBlock .LinkTo(actionBlock);


// DataFlow object method where datadlow objects used in a thread
public async void OnRunDataFlow(FileQueueItem f)
{
    Task.Run(() =>
    {
        var sent = await producerChange.SendAsync(f);
    });
}
c# multithreading thread-safety tpl-dataflow
1个回答
0
投票

不,对象不会自动成为线程安全的。如果您的数据流设置允许多个线程同时使用同一对象,则必须使用

lock
语句适当地同步对对象的访问,否则对象的状态可能会损坏。

© www.soinside.com 2019 - 2024. All rights reserved.