Interlocked.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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. private Interlocked () {}
  14. public static int CompareExchange(ref int location1, int value, int comparand) {
  15. // lock
  16. if(comparand==location1) {
  17. int ret;
  18. ret=location1;
  19. location1=value;
  20. return(ret);
  21. }
  22. return(location1);
  23. }
  24. public static object CompareExchange(ref object location1, object value, object comparand) {
  25. // lock
  26. if(comparand==location1) {
  27. object ret;
  28. ret=location1;
  29. location1=value;
  30. return(ret);
  31. }
  32. return(location1);
  33. }
  34. public static float CompareExchange(ref float location1, float value, float comparand) {
  35. // lock
  36. if(comparand==location1) {
  37. float ret;
  38. ret=location1;
  39. location1=value;
  40. return(ret);
  41. }
  42. return(location1);
  43. }
  44. public static int Decrement(ref int location) {
  45. // lock
  46. location--;
  47. return(location);
  48. }
  49. public static long Decrement(ref long location) {
  50. // lock
  51. location--;
  52. return(location);
  53. }
  54. public static int Exchange(ref int location1, int value) {
  55. // lock
  56. int ret;
  57. ret=location1;
  58. location1=value;
  59. return(ret);
  60. }
  61. public static object Exchange(ref object location1, object value) {
  62. // lock
  63. object ret;
  64. ret=location1;
  65. location1=value;
  66. return(ret);
  67. }
  68. public static float Exchange(ref float location1, float value) {
  69. // lock
  70. float ret;
  71. ret=location1;
  72. location1=value;
  73. return(ret);
  74. }
  75. public static int Increment(ref int location) {
  76. // lock
  77. location++;
  78. return(location);
  79. }
  80. public static long Increment(ref long location) {
  81. // lock
  82. location++;
  83. return(location);
  84. }
  85. }
  86. }