zyf
2025-03-20 f692a8015de17ddc42167d59be0ffe3876c17963
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#pragma once
#include "ConnectMysql.h"
#include <queue>
#include <mutex>
#include <thread>
#include <atomic>
#include <condition_variable>
 
using namespace std;
 
/*¸ÅÄÊý¾Ý¿âÁ¬½Ó³ØÊdzÌÐòÆô¶¯Ê±½¨Á¢×ã¹»µÄÊý¾Ý¿âÁ¬½Ó£¬²¢½«ÕâЩÁ¬½Ó×é³ÉÒ»¸öÁ¬½Ó³Ø£¬ÓɳÌÐò¶¯Ì¬µØ¶Ô³ØÖеÄÁ¬½Ó½øÐÐÉêÇ룬ʹÓã¬ÊÍ·Å¡£
×÷Óãº
1.×ÊÔ´ÖØÓ㬱ÜÃâÁËÊý¾Ý¿âÁ¬½ÓƵ·±½¨Á¢¡¢¹Ø±ÕµÄ¿ªÏú
2.¸ü¿ìµÄϵͳÏìÓ¦ËÙ¶È£¬Ö±½Ó´ÓÁ¬½Ó³ØÖлñÈ¡Á¬½Ó£¬ÏìÓ¦Ëٶȼӿì
3.¿ØÖÆ×ÊÔ´µÄʹÓá£Èç¹û²»Ê¹ÓÃÁ¬½Ó³Ø£¬Ã¿´Î·ÃÎÊÊý¾Ý¿â¶¼ÐèÒª´´½¨Ò»¸öÁ¬½Ó£¬ÕâÑùϵͳµÄÎȶ¨ÐÔÊÜϵͳÁ¬½ÓÐèÇóÓ°ÏìºÜ´ó£¬ºÜÈÝÒײúÉú×ÊÔ´À˷Ѻ͸߸ºÔØÒì³£¡£Á¬½Ó³ØÄܹ»Ê¹ÐÔÄÜ×î´ó»¯£¬½«×ÊÔ´ÀûÓÿØÖÆÔÚÒ»¶¨µÄˮƽ֮Ï¡£Á¬½Ó³ØÄÜ¿ØÖƳØÖеÄÁ¬½ÓÊýÁ¿£¬ÔöÇ¿ÁËϵͳÔÚ´óÁ¿Óû§Ó¦ÓÃʱµÄÎȶ¨ÐÔ¡£
*/
 
class ConnectionPool// Á¬½Ó³ØÀà, µ¥Àýģʽ--ÀÁºº
{
private:
    ConnectionPool();
    ConnectionPool(const ConnectionPool&) = delete;
    ConnectionPool& operator=(const ConnectionPool&) = delete;
    ~ConnectionPool();
 
    bool parseConfig();    // ½âÎöÅäÖÃÎļþ
 
    bool addConnection();    // Ìí¼ÓеÄÊý¾Ý¿âÁ¬½Óµ½Á¬½Ó³Ø
 
    void producer();    // Éú²úÕßÏ̺߳¯Êý£¬¸ºÔð´´½¨ÐÂÁ¬½Ó
 
    void recycler();    // »ØÊÕÕßÏ̺߳¯Êý£¬¸ºÔð»ØÊÕ¿ÕÏÐÁ¬½Ó
 
    queue<ConnectMysql*> m_connections;    // ´æ·ÅÊý¾Ý¿âÁ¬½Ó³Ø½¨Á¢µÄÁ¬½Ó
 
    string m_ip = "192.168.133.129";// IP
    unsigned short m_port = 3306;// ¶Ë¿Ú
    string m_user = "root";// Óû§Ãû
    string m_passwd = "1";// ÃÜÂë
    string m_dbName = "AI_datas";// Êý¾Ý¿âÃû
    int m_minSize;// ×îСÁ¬½ÓÊý
    int m_maxSize;// ×î´óÁ¬½ÓÊý
    int m_timeout;// ³¬Ê±Ê±¼ä
    int m_maxIdleTime;// ×î´ó¿ÕÏÐʱ¼ä
 
    mutex m_mutex;
    condition_variable m_cond;
    condition_variable m_cond1;
 
    atomic_int m_num;// µ±Ç°Á¬½ÓÊý
 
public:
 
    static ConnectionPool* getInstance();    // »ñÈ¡Á¬½Ó³Øµ¥Àý¶ÔÏó
 
    shared_ptr<ConnectMysql> getConnection();    // ´ÓÁ¬½Ó³Ø»ñȡһ¸öÊý¾Ý¿âÁ¬½Ó
};