Ejemplo n.º 1
0
        private void Init()
        {
            Writer = () =>
            {
                while (Executing)
                {
                    if (WriteBuffer.Count > 0)
                    {
                        lock (WriteBuffer)
                        {
                            if (WriteBuffer.Count > 0)
                            {
                                var e = WriteBuffer.Dequeue();
                                //Debug.WriteLine($"Computer reads {e}");
                                return(e);
                            }

                            Thread.Sleep(1);
                        }
                    }
                }

                return(-1);
            };
            Reader = l =>
            {
                lock (ReadBuffer)
                {
                    //Debug.WriteLine($"Computer writes {l}");
                    ReadBuffer.Enqueue(l);
                }
            };
        }
Ejemplo n.º 2
0
        /// <inheritdoc />
        public BufferedComputer (IEnumerable <int> code, Action waitForWriteContent = null) : base (code)
        {
            WaitForWriteContent = waitForWriteContent;

            Reader = ReadBuffer.Enqueue;
            Writer = () =>
            {
                while (true)
                {
                    WaitForWriteContent.Invoke ();
                    if (WriteBuffer.Count != 0)
                        break;
                    Thread.Sleep (1);
                }

                return WriteBuffer.Dequeue ();
            };
        }