Exemplo n.º 1
0
        public ConcurrentBag <string> Process()
        {
            var container        = new SharedDataContainer();
            var receivedMessages = new ConcurrentBag <string>();

            for (int i = 0; i < NumberOfWriters; i++)
            {
                int id     = i;
                var writer = new Writer(id, NumberOfMessages, container);
                var thread = new Thread(() => writer.Write())
                {
                    Name = "Writer" + id, Priority = Priority
                };
                thread.Start();
            }

            for (int i = 0; i < NumberOfReaders; i++)
            {
                var reader = new Reader(receivedMessages, container);
                var thread = new Thread(() => reader.Read())
                {
                    IsBackground = true, Name = "Reader" + i,
                    Priority     = Priority
                };
                thread.Start();
            }

            var totalMessages = NumberOfMessages * NumberOfWriters;

            while (container.WritersFinished < NumberOfWriters || receivedMessages.Count < totalMessages)
            {
                Thread.Sleep(1);
            }

            container.IsCancelled = true;
            Thread.Sleep(1);

            return(receivedMessages);
        }
Exemplo n.º 2
0
 public Reader(ConcurrentBag <string> receivedMessages, SharedDataContainer container)
 {
     _receivedMessages = receivedMessages;
     _container        = container;
 }
Exemplo n.º 3
0
 public Writer(int id, int numberOfMessages, SharedDataContainer container)
 {
     _id = id;
     _numberOfMessages = numberOfMessages;
     _container        = container;
 }