1 // Copyright 2004-2008 Castle Project - http://www.castleproject.org/
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
7 // http://www.apache.org/licenses/LICENSE-2.0
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
15 namespace Castle
.MicroKernel
.Tests
.Pools
17 using System
.Threading
;
18 using NUnit
.Framework
;
21 public class MultithreadedPooledTestCase
23 private ManualResetEvent _startEvent
= new ManualResetEvent(false);
24 private ManualResetEvent _stopEvent
= new ManualResetEvent(false);
25 private IKernel _kernel
;
28 public void Multithreaded()
30 _kernel
= new DefaultKernel();
31 _kernel
.AddComponent("a", typeof(PoolableComponent1
));
33 const int threadCount
= 15;
35 Thread
[] threads
= new Thread
[threadCount
];
37 for(int i
= 0; i
< threadCount
; i
++)
39 threads
[i
] = new Thread(new ThreadStart(ExecuteMethodUntilSignal
));
45 Thread
.CurrentThread
.Join(3 * 1000);
50 public void ExecuteMethodUntilSignal()
52 _startEvent
.WaitOne(int.MaxValue
, false);
54 while(!_stopEvent
.WaitOne(1, false))
56 PoolableComponent1 instance
= _kernel
["a"] as PoolableComponent1
;
58 Assert
.IsNotNull(instance
);
60 Thread
.Sleep(1 * 500);
62 _kernel
.ReleaseComponent(instance
);