基于C++ Coroutines提案 ‘Stackless Resumable Functions’编写的协程库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

librf.cpp 3.0KB

6 yıl önce
6 yıl önce
6 yıl önce
6 yıl önce
6 yıl önce
6 yıl önce
6 yıl önce
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. 
  2. #include "librf.h"
  3. #include <optional>
  4. #include <crtdbg.h>
  5. //#define _WITH_LOCK_FREE_Q_KEEP_REAL_SIZE 1
  6. #include "src/ring_queue.h"
  7. #include "src/ring_queue_spinlock.h"
  8. #include "src/ring_queue_lockfree.h"
  9. #include "../tutorial/test_ring_queue.h"
  10. extern void resumable_main_yield_return();
  11. extern void resumable_main_timer();
  12. extern void resumable_main_suspend_always();
  13. extern void resumable_main_sleep();
  14. extern void resumable_main_routine();
  15. extern void resumable_main_resumable();
  16. extern void resumable_main_mutex();
  17. extern void resumable_main_exception();
  18. extern void resumable_main_event();
  19. extern void resumable_main_event_v2();
  20. extern void resumable_main_event_timeout();
  21. extern void resumable_main_dynamic_go();
  22. extern void resumable_main_channel();
  23. extern void resumable_main_cb();
  24. extern void resumable_main_modern_cb();
  25. extern void resumable_main_multi_thread();
  26. extern void resumable_main_channel_mult_thread();
  27. extern void resumable_main_when_all();
  28. extern void resumable_main_layout();
  29. extern void resumable_main_switch_scheduler();
  30. extern void resumable_main_benchmark_mem(bool wait_key);
  31. extern void benchmark_main_channel_passing_next();
  32. extern void resumable_main_benchmark_asio_server();
  33. extern void resumable_main_benchmark_asio_client(intptr_t nNum);
  34. int main(int argc, const char* argv[])
  35. {
  36. //_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_LEAK_CHECK_DF);
  37. (void)argc;
  38. (void)argv;
  39. //test_ring_queue_simple<resumef::ring_queue<int>>();
  40. //test_ring_queue<resumef::ring_queue_spinlock<int, false, uint32_t>>();
  41. //test_ring_queue<resumef::ring_queue_lockfree<int, uint64_t>>();
  42. resumable_main_mutex();
  43. return 0;
  44. //if (argc > 1)
  45. // resumable_main_benchmark_asio_client(atoi(argv[1]));
  46. //else
  47. // resumable_main_benchmark_asio_server();
  48. resumable_main_cb(); _CrtCheckMemory();
  49. resumable_main_layout(); _CrtCheckMemory();
  50. resumable_main_modern_cb(); _CrtCheckMemory();
  51. resumable_main_suspend_always(); _CrtCheckMemory();
  52. resumable_main_yield_return(); _CrtCheckMemory();
  53. resumable_main_resumable(); _CrtCheckMemory();
  54. resumable_main_routine(); _CrtCheckMemory();
  55. resumable_main_exception(); _CrtCheckMemory();
  56. resumable_main_dynamic_go(); _CrtCheckMemory();
  57. resumable_main_multi_thread(); _CrtCheckMemory();
  58. resumable_main_timer(); _CrtCheckMemory();
  59. resumable_main_benchmark_mem(false); _CrtCheckMemory();
  60. resumable_main_mutex(); _CrtCheckMemory();
  61. resumable_main_event(); _CrtCheckMemory();
  62. resumable_main_event_v2(); _CrtCheckMemory();
  63. resumable_main_event_timeout(); _CrtCheckMemory();
  64. resumable_main_channel(); _CrtCheckMemory();
  65. resumable_main_channel_mult_thread(); _CrtCheckMemory();
  66. resumable_main_sleep(); _CrtCheckMemory();
  67. resumable_main_when_all(); _CrtCheckMemory();
  68. resumable_main_switch_scheduler(); _CrtCheckMemory();
  69. std::cout << "ALL OK!" << std::endl;
  70. benchmark_main_channel_passing_next(); //这是一个死循环测试
  71. _CrtCheckMemory();
  72. return 0;
  73. }