Interlocked.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. //
  2. // System.Threading.Interlocked.cs
  3. //
  4. // Author:
  5. // Dick Porter ([email protected])
  6. //
  7. // (C) Ximian, Inc. http://www.ximian.com
  8. //
  9. namespace System.Threading
  10. {
  11. public sealed class Interlocked
  12. {
  13. public static int CompareExchange(ref int location1, int value, int comparand) {
  14. // lock
  15. if(comparand==location1) {
  16. int ret;
  17. ret=location1;
  18. location1=value;
  19. return(ret);
  20. }
  21. return(location1);
  22. }
  23. public static object CompareExchange(ref object location1, object value, object comparand) {
  24. // lock
  25. if(comparand==location1) {
  26. object ret;
  27. ret=location1;
  28. location1=value;
  29. return(ret);
  30. }
  31. return(location1);
  32. }
  33. public static float CompareExchange(ref float location1, float value, float comparand) {
  34. // lock
  35. if(comparand==location1) {
  36. float ret;
  37. ret=location1;
  38. location1=value;
  39. return(ret);
  40. }
  41. return(location1);
  42. }
  43. public static int Decrement(ref int location) {
  44. // lock
  45. location--;
  46. return(location);
  47. }
  48. public static long Decrement(ref long location) {
  49. // lock
  50. location--;
  51. return(location);
  52. }
  53. public static int Exchange(ref int location1, int value) {
  54. // lock
  55. int ret;
  56. ret=location1;
  57. location1=value;
  58. return(ret);
  59. }
  60. public static object Exchange(ref object location1, object value) {
  61. // lock
  62. object ret;
  63. ret=location1;
  64. location1=value;
  65. return(ret);
  66. }
  67. public static float Exchange(ref float location1, float value) {
  68. // lock
  69. float ret;
  70. ret=location1;
  71. location1=value;
  72. return(ret);
  73. }
  74. public static int Increment(ref int location) {
  75. // lock
  76. location++;
  77. return(location);
  78. }
  79. public static long Increment(ref long location) {
  80. // lock
  81. location++;
  82. return(location);
  83. }
  84. }
  85. }