2019-05-04 10:11:59 +02:00
using System ;
using System.Collections.Generic ;
using System.ComponentModel ;
using System.Data ;
using System.Drawing ;
using System.Linq ;
using System.Text ;
2019-05-04 11:07:41 +02:00
using System.Threading ;
2019-05-04 10:11:59 +02:00
using System.Threading.Tasks ;
using System.Windows.Forms ;
namespace WindowsFormsAppCache
{
public partial class Form1 : Form
{
public Form1 ( )
{
InitializeComponent ( ) ;
}
2019-05-04 11:07:41 +02:00
private void Button1_Click ( object sender , EventArgs e )
{
Object lockobject = new Object ( ) ;
var t1 = new Task ( ( pb ) = >
{
PictureBox pb2 = ( PictureBox ) pb ;
while ( true )
{
Random ran = new Random ( ) ;
int number = ran . Next ( 0 , 6 ) ;
lock ( lockobject )
{
pb2 . Image = Cache . getImageFromCache ( number ) ;
}
}
} , pictureBox1 ) ;
;
var t2 = new Task ( ( pb ) = >
{
PictureBox pb2 = ( PictureBox ) pb ;
while ( true )
{
Random ran = new Random ( ) ;
int number = ran . Next ( 0 , 6 ) ;
lock ( lockobject )
{
pb2 . Image = Cache . getImageFromCache ( number ) ;
}
}
} , pictureBox2 ) ;
;
var t3 = new Task ( ( pb ) = >
{
PictureBox pb2 = ( PictureBox ) pb ;
while ( true )
{
Random ran = new Random ( ) ;
int number = ran . Next ( 0 , 6 ) ;
lock ( lockobject )
{
pb2 . Image = Cache . getImageFromCache ( number ) ;
}
}
} , pictureBox3 ) ;
;
var t4 = new Task ( ( pb ) = >
{
PictureBox pb2 = ( PictureBox ) pb ;
while ( true )
{
Random ran = new Random ( ) ;
int number = ran . Next ( 0 , 6 ) ;
lock ( lockobject )
{
pb2 . Image = Cache . getImageFromCache ( number ) ;
}
}
} , pictureBox4 ) ;
;
t1 . Start ( ) ;
t2 . Start ( ) ;
t3 . Start ( ) ;
t4 . Start ( ) ;
Task . WaitAll ( t1 , t2 , t3 , t4 ) ;
}
private void Button2_Click ( object sender , EventArgs e )
{
ReaderWriterLockSlim rwls = new ReaderWriterLockSlim ( ) ;
var t1 = new Task ( ( pb ) = >
{
PictureBox pb2 = ( PictureBox ) pb ;
while ( true )
{
Random ran = new Random ( ) ;
int number = ran . Next ( 0 , 6 ) ;
rwls . EnterReadLock ( ) ;
pb2 . Image = Cache . getImageFromCache ( number ) ;
rwls . ExitReadLock ( ) ;
}
} , pictureBox1 ) ;
;
var t2 = new Task ( ( pb ) = >
{
PictureBox pb2 = ( PictureBox ) pb ;
while ( true )
{
Random ran = new Random ( ) ;
int number = ran . Next ( 0 , 6 ) ;
rwls . EnterReadLock ( ) ;
pb2 . Image = Cache . getImageFromCache ( number ) ;
rwls . ExitReadLock ( ) ;
}
} , pictureBox2 ) ;
;
var t3 = new Task ( ( pb ) = >
{
PictureBox pb2 = ( PictureBox ) pb ;
while ( true )
{
Random ran = new Random ( ) ;
int number = ran . Next ( 0 , 6 ) ;
rwls . EnterReadLock ( ) ;
pb2 . Image = Cache . getImageFromCache ( number ) ;
rwls . ExitReadLock ( ) ;
}
} , pictureBox3 ) ;
;
var t4 = new Task ( ( pb ) = >
{
PictureBox pb2 = ( PictureBox ) pb ;
while ( true )
{
Random ran = new Random ( ) ;
int number = ran . Next ( 0 , 6 ) ;
rwls . EnterReadLock ( ) ;
pb2 . Image = Cache . getImageFromCache ( number ) ;
rwls . ExitReadLock ( ) ;
}
} , pictureBox4 ) ;
;
t1 . Start ( ) ;
t2 . Start ( ) ;
t3 . Start ( ) ;
t4 . Start ( ) ;
Task . WaitAll ( t1 , t2 , t3 , t4 ) ;
}
private void Button3_Click ( object sender , EventArgs e )
{
ReaderWriterLockSlim rwls = new ReaderWriterLockSlim ( ) ;
var t1 = new Task ( ( pb ) = >
{
PictureBox pb2 = ( PictureBox ) pb ;
while ( true )
{
Random ran = new Random ( ) ;
int number = ran . Next ( 0 , 6 ) ;
rwls . EnterReadLock ( ) ;
pb2 . Image = DB . getImageFromDB ( number ) ;
rwls . ExitReadLock ( ) ;
}
} , pictureBox1 ) ;
;
var t2 = new Task ( ( pb ) = >
{
PictureBox pb2 = ( PictureBox ) pb ;
while ( true )
{
Random ran = new Random ( ) ;
int number = ran . Next ( 0 , 6 ) ;
rwls . EnterReadLock ( ) ;
pb2 . Image = DB . getImageFromDB ( number ) ;
rwls . ExitReadLock ( ) ;
}
} , pictureBox2 ) ;
;
var t3 = new Task ( ( pb ) = >
{
PictureBox pb2 = ( PictureBox ) pb ;
while ( true )
{
Random ran = new Random ( ) ;
int number = ran . Next ( 0 , 6 ) ;
rwls . EnterReadLock ( ) ;
pb2 . Image = DB . getImageFromDB ( number ) ;
rwls . ExitReadLock ( ) ;
}
} , pictureBox3 ) ;
;
var t4 = new Task ( ( pb ) = >
{
PictureBox pb2 = ( PictureBox ) pb ;
while ( true )
{
Random ran = new Random ( ) ;
int number = ran . Next ( 0 , 6 ) ;
rwls . EnterReadLock ( ) ;
pb2 . Image = DB . getImageFromDB ( number ) ;
rwls . ExitReadLock ( ) ;
}
} , pictureBox4 ) ;
;
t1 . Start ( ) ;
t2 . Start ( ) ;
t3 . Start ( ) ;
t4 . Start ( ) ;
Task . WaitAll ( t1 , t2 , t3 , t4 ) ;
}
}
public static class DB
{
public static Bitmap getImageFromDB ( int colorNumber )
{
Thread . Sleep ( 1000 ) ;
Color [ ] color = new Color [ 7 ] ;
color [ 0 ] = Color . White ;
color [ 1 ] = Color . Blue ;
color [ 2 ] = Color . Green ;
color [ 3 ] = Color . Yellow ;
color [ 4 ] = Color . Black ;
color [ 5 ] = Color . Chocolate ;
color [ 6 ] = Color . Brown ;
var b = new Bitmap ( 1 , 1 ) ;
b . SetPixel ( 0 , 0 , color [ colorNumber ] ) ;
var result = new Bitmap ( b , 128 , 128 ) ;
return result ;
}
}
public static class Cache
{
private static List < int > colorCache = new List < int > ( ) ;
public static Bitmap getImageFromCache ( int colorNumber )
{
Thread . Sleep ( 100 ) ;
if ( colorCache . Contains ( colorNumber ) )
{
Color [ ] color = new Color [ 7 ] ;
color [ 0 ] = Color . White ;
color [ 1 ] = Color . Blue ;
color [ 2 ] = Color . Green ;
color [ 3 ] = Color . Yellow ;
color [ 4 ] = Color . Black ;
color [ 5 ] = Color . Chocolate ;
color [ 6 ] = Color . Brown ;
var b = new Bitmap ( 1 , 1 ) ;
b . SetPixel ( 0 , 0 , color [ colorNumber ] ) ;
var result = new Bitmap ( b , 128 , 128 ) ;
return result ;
}
else
{
colorCache . Add ( colorNumber ) ;
return DB . getImageFromDB ( colorNumber ) ;
}
}
2019-05-04 10:11:59 +02:00
}
2019-05-04 11:07:41 +02:00
}