54 C++ 多线程 条件变量 condition_variable,wait(),notify_one()

一 前提:之前代码的缺陷

在前面我们使用两个线程 ,一个线程读,一个线程写来完成对于共享数据访问。

我们把这个代码 先放在这里,方便回忆,然后说明代码可能存在的问题,然后改动。

class Teacher174 {
private:
	mutex mymutex;
	list mylist;
public:

	void writefunc() {
		for (size_t i = 0; i < 1000; i++)
		{
			mymutex.lock();
			mylist.push_back(i);
			cout << "写入数据为: i= " << i << endl;
			mymutex.unlock();
		}
	}

	void readfunc() {
		for (size_t i = 0; i < 1000; i++)
		{
			mymutex.lock();
			if (!mylist.empty()) {
				cout << "读取到的值为 :" << mylist.front() << endl;
				mylist.pop_front();
			}
			cout << "读取第" << i  << "次" << endl;
			mymutex.unlock();
		}
	}
};


void main() {
	Teacher174 tea;
	thread readthread(&Teacher174::readfunc, &tea);
	thread writethread(&Teacher174::writefunc, &tea);
	readthread.join();
	writethread.join();
	cout << "end" << endl;
}

我们将多次运行的结果随便找一个贴出来

读取第0次
写入数据为: i= 0
写入数据为: i= 1
写入数据为: i= 2
写入数据为: i= 3
写入数据为: i= 4
写入数据为: i= 5
写入数据为: i= 6
写入数据为: i= 7
写入数据为: i= 8
写入数据为: i= 9
写入数据为: i= 10
写入数据为: i= 11
写入数据为: i= 12
写入数据为: i= 13
写入数据为: i= 14
写入数据为: i= 15
写入数据为: i= 16
写入数据为: i= 17
写入数据为: i= 18
写入数据为: i= 19
写入数据为: i= 20
写入数据为: i= 21
写入数据为: i= 22
写入数据为: i= 23
写入数据为: i= 24
写入数据为: i= 25
写入数据为: i= 26
写入数据为: i= 27
写入数据为: i= 28
写入数据为: i= 29
写入数据为: i= 30
写入数据为: i= 31
写入数据为: i= 32
写入数据为: i= 33
写入数据为: i= 34
写入数据为: i= 35
写入数据为: i= 36
写入数据为: i= 37
写入数据为: i= 38
写入数据为: i= 39
写入数据为: i= 40
写入数据为: i= 41
写入数据为: i= 42
写入数据为: i= 43
写入数据为: i= 44
写入数据为: i= 45
写入数据为: i= 46
写入数据为: i= 47
写入数据为: i= 48
写入数据为: i= 49
写入数据为: i= 50
写入数据为: i= 51
写入数据为: i= 52
写入数据为: i= 53
写入数据为: i= 54
写入数据为: i= 55
写入数据为: i= 56
写入数据为: i= 57
写入数据为: i= 58
写入数据为: i= 59
写入数据为: i= 60
写入数据为: i= 61
写入数据为: i= 62
写入数据为: i= 63
写入数据为: i= 64
写入数据为: i= 65
写入数据为: i= 66
写入数据为: i= 67
写入数据为: i= 68
写入数据为: i= 69
写入数据为: i= 70
写入数据为: i= 71
写入数据为: i= 72
写入数据为: i= 73
写入数据为: i= 74
写入数据为: i= 75
写入数据为: i= 76
写入数据为: i= 77
写入数据为: i= 78
写入数据为: i= 79
写入数据为: i= 80
写入数据为: i= 81
写入数据为: i= 82
写入数据为: i= 83
写入数据为: i= 84
写入数据为: i= 85
写入数据为: i= 86
写入数据为: i= 87
写入数据为: i= 88
写入数据为: i= 89
写入数据为: i= 90
写入数据为: i= 91
写入数据为: i= 92
写入数据为: i= 93
写入数据为: i= 94
写入数据为: i= 95
写入数据为: i= 96
写入数据为: i= 97
写入数据为: i= 98
写入数据为: i= 99
写入数据为: i= 100
写入数据为: i= 101
写入数据为: i= 102
写入数据为: i= 103
写入数据为: i= 104
写入数据为: i= 105
写入数据为: i= 106
写入数据为: i= 107
写入数据为: i= 108
写入数据为: i= 109
写入数据为: i= 110
写入数据为: i= 111
写入数据为: i= 112
写入数据为: i= 113
写入数据为: i= 114
写入数据为: i= 115
写入数据为: i= 116
写入数据为: i= 117
写入数据为: i= 118
写入数据为: i= 119
写入数据为: i= 120
写入数据为: i= 121
写入数据为: i= 122
写入数据为: i= 123
写入数据为: i= 124
写入数据为: i= 125
写入数据为: i= 126
写入数据为: i= 127
写入数据为: i= 128
写入数据为: i= 129
写入数据为: i= 130
写入数据为: i= 131
写入数据为: i= 132
写入数据为: i= 133
写入数据为: i= 134
写入数据为: i= 135
写入数据为: i= 136
写入数据为: i= 137
写入数据为: i= 138
写入数据为: i= 139
写入数据为: i= 140
写入数据为: i= 141
写入数据为: i= 142
写入数据为: i= 143
写入数据为: i= 144
写入数据为: i= 145
写入数据为: i= 146
写入数据为: i= 147
写入数据为: i= 148
写入数据为: i= 149
写入数据为: i= 150
写入数据为: i= 151
写入数据为: i= 152
写入数据为: i= 153
写入数据为: i= 154
写入数据为: i= 155
写入数据为: i= 156
写入数据为: i= 157
写入数据为: i= 158
写入数据为: i= 159
写入数据为: i= 160
写入数据为: i= 161
写入数据为: i= 162
写入数据为: i= 163
写入数据为: i= 164
写入数据为: i= 165
写入数据为: i= 166
写入数据为: i= 167
写入数据为: i= 168
写入数据为: i= 169
写入数据为: i= 170
写入数据为: i= 171
写入数据为: i= 172
写入数据为: i= 173
写入数据为: i= 174
写入数据为: i= 175
写入数据为: i= 176
写入数据为: i= 177
写入数据为: i= 178
写入数据为: i= 179
写入数据为: i= 180
写入数据为: i= 181
写入数据为: i= 182
读取到的值为 :0
读取第1次
读取到的值为 :1
读取第2次
读取到的值为 :2
读取第3次
读取到的值为 :3
读取第4次
读取到的值为 :4
读取第5次
读取到的值为 :5
读取第6次
读取到的值为 :6
读取第7次
读取到的值为 :7
读取第8次
读取到的值为 :8
读取第9次
读取到的值为 :9
读取第10次
读取到的值为 :10
读取第11次
读取到的值为 :11
读取第12次
读取到的值为 :12
读取第13次
读取到的值为 :13
读取第14次
读取到的值为 :14
读取第15次
读取到的值为 :15
读取第16次
读取到的值为 :16
读取第17次
读取到的值为 :17
读取第18次
读取到的值为 :18
读取第19次
读取到的值为 :19
读取第20次
读取到的值为 :20
读取第21次
读取到的值为 :21
读取第22次
读取到的值为 :22
读取第23次
读取到的值为 :23
读取第24次
读取到的值为 :24
读取第25次
读取到的值为 :25
读取第26次
读取到的值为 :26
读取第27次
读取到的值为 :27
读取第28次
读取到的值为 :28
读取第29次
读取到的值为 :29
读取第30次
读取到的值为 :30
读取第31次
读取到的值为 :31
读取第32次
读取到的值为 :32
读取第33次
读取到的值为 :33
读取第34次
读取到的值为 :34
读取第35次
读取到的值为 :35
读取第36次
读取到的值为 :36
读取第37次
读取到的值为 :37
读取第38次
读取到的值为 :38
读取第39次
读取到的值为 :39
读取第40次
读取到的值为 :40
读取第41次
读取到的值为 :41
读取第42次
读取到的值为 :42
读取第43次
读取到的值为 :43
读取第44次
读取到的值为 :44
读取第45次
读取到的值为 :45
读取第46次
读取到的值为 :46
读取第47次
读取到的值为 :47
读取第48次
读取到的值为 :48
读取第49次
读取到的值为 :49
读取第50次
读取到的值为 :50
读取第51次
读取到的值为 :51
读取第52次
读取到的值为 :52
读取第53次
读取到的值为 :53
读取第54次
读取到的值为 :54
读取第55次
读取到的值为 :55
读取第56次
读取到的值为 :56
读取第57次
读取到的值为 :57
读取第58次
读取到的值为 :58
读取第59次
读取到的值为 :59
读取第60次
读取到的值为 :60
读取第61次
读取到的值为 :61
读取第62次
读取到的值为 :62
读取第63次
读取到的值为 :63
读取第64次
读取到的值为 :64
读取第65次
读取到的值为 :65
读取第66次
读取到的值为 :66
读取第67次
读取到的值为 :67
读取第68次
读取到的值为 :68
读取第69次
读取到的值为 :69
读取第70次
读取到的值为 :70
读取第71次
读取到的值为 :71
读取第72次
读取到的值为 :72
读取第73次
读取到的值为 :73
读取第74次
读取到的值为 :74
读取第75次
读取到的值为 :75
读取第76次
读取到的值为 :76
读取第77次
读取到的值为 :77
读取第78次
读取到的值为 :78
读取第79次
读取到的值为 :79
读取第80次
读取到的值为 :80
读取第81次
读取到的值为 :81
读取第82次
读取到的值为 :82
读取第83次
读取到的值为 :83
读取第84次
读取到的值为 :84
读取第85次
读取到的值为 :85
读取第86次
读取到的值为 :86
读取第87次
读取到的值为 :87
读取第88次
读取到的值为 :88
读取第89次
读取到的值为 :89
读取第90次
读取到的值为 :90
读取第91次
读取到的值为 :91
读取第92次
读取到的值为 :92
读取第93次
读取到的值为 :93
读取第94次
读取到的值为 :94
读取第95次
读取到的值为 :95
读取第96次
读取到的值为 :96
读取第97次
读取到的值为 :97
读取第98次
读取到的值为 :98
读取第99次
读取到的值为 :99
读取第100次
读取到的值为 :100
读取第101次
读取到的值为 :101
读取第102次
读取到的值为 :102
读取第103次
读取到的值为 :103
读取第104次
读取到的值为 :104
读取第105次
读取到的值为 :105
读取第106次
读取到的值为 :106
读取第107次
读取到的值为 :107
读取第108次
读取到的值为 :108
读取第109次
读取到的值为 :109
读取第110次
读取到的值为 :110
读取第111次
读取到的值为 :111
读取第112次
读取到的值为 :112
读取第113次
读取到的值为 :113
读取第114次
读取到的值为 :114
读取第115次
读取到的值为 :115
读取第116次
读取到的值为 :116
读取第117次
读取到的值为 :117
读取第118次
读取到的值为 :118
读取第119次
读取到的值为 :119
读取第120次
读取到的值为 :120
读取第121次
读取到的值为 :121
读取第122次
读取到的值为 :122
读取第123次
读取到的值为 :123
读取第124次
读取到的值为 :124
读取第125次
读取到的值为 :125
读取第126次
读取到的值为 :126
读取第127次
读取到的值为 :127
读取第128次
读取到的值为 :128
读取第129次
读取到的值为 :129
读取第130次
读取到的值为 :130
读取第131次
读取到的值为 :131
读取第132次
读取到的值为 :132
读取第133次
读取到的值为 :133
读取第134次
读取到的值为 :134
读取第135次
读取到的值为 :135
读取第136次
读取到的值为 :136
读取第137次
读取到的值为 :137
读取第138次
读取到的值为 :138
读取第139次
读取到的值为 :139
读取第140次
读取到的值为 :140
读取第141次
读取到的值为 :141
读取第142次
读取到的值为 :142
读取第143次
读取到的值为 :143
读取第144次
读取到的值为 :144
读取第145次
读取到的值为 :145
读取第146次
读取到的值为 :146
读取第147次
读取到的值为 :147
读取第148次
读取到的值为 :148
读取第149次
读取到的值为 :149
读取第150次
读取到的值为 :150
读取第151次
读取到的值为 :151
读取第152次
读取到的值为 :152
读取第153次
读取到的值为 :153
读取第154次
读取到的值为 :154
读取第155次
读取到的值为 :155
读取第156次
读取到的值为 :156
读取第157次
读取到的值为 :157
读取第158次
读取到的值为 :158
读取第159次
读取到的值为 :159
读取第160次
读取到的值为 :160
读取第161次
读取到的值为 :161
读取第162次
读取到的值为 :162
读取第163次
读取到的值为 :163
读取第164次
读取到的值为 :164
读取第165次
读取到的值为 :165
读取第166次
读取到的值为 :166
读取第167次
读取到的值为 :167
读取第168次
读取到的值为 :168
读取第169次
读取到的值为 :169
读取第170次
读取到的值为 :170
读取第171次
读取到的值为 :171
读取第172次
读取到的值为 :172
读取第173次
读取到的值为 :173
读取第174次
读取到的值为 :174
读取第175次
读取到的值为 :175
读取第176次
读取到的值为 :176
读取第177次
读取到的值为 :177
读取第178次
读取到的值为 :178
读取第179次
读取到的值为 :179
读取第180次
读取到的值为 :180
读取第181次
读取到的值为 :181
读取第182次
读取到的值为 :182
读取第183次
读取第184次
读取第185次
读取第186次
读取第187次
读取第188次
读取第189次
读取第190次
读取第191次
读取第192次
读取第193次
读取第194次
读取第195次
读取第196次
读取第197次
读取第198次
读取第199次
读取第200次
读取第201次
读取第202次
读取第203次
读取第204次
读取第205次
读取第206次
读取第207次
读取第208次
读取第209次
读取第210次
读取第211次
读取第212次
读取第213次
读取第214次
读取第215次
读取第216次
读取第217次
读取第218次
读取第219次
读取第220次
读取第221次
读取第222次
读取第223次
读取第224次
读取第225次
读取第226次
读取第227次
读取第228次
读取第229次
读取第230次
读取第231次
读取第232次
读取第233次
读取第234次
读取第235次
读取第236次
读取第237次
读取第238次
读取第239次
读取第240次
读取第241次
读取第242次
读取第243次
读取第244次
读取第245次
读取第246次
读取第247次
读取第248次
写入数据为: i= 183
写入数据为: i= 184
写入数据为: i= 185
写入数据为: i= 186
写入数据为: i= 187
写入数据为: i= 188
写入数据为: i= 189
写入数据为: i= 190
写入数据为: i= 191
写入数据为: i= 192
写入数据为: i= 193
写入数据为: i= 194
写入数据为: i= 195
写入数据为: i= 196
写入数据为: i= 197
写入数据为: i= 198
写入数据为: i= 199
写入数据为: i= 200
写入数据为: i= 201
写入数据为: i= 202
写入数据为: i= 203
写入数据为: i= 204
写入数据为: i= 205
写入数据为: i= 206
写入数据为: i= 207
写入数据为: i= 208
写入数据为: i= 209
写入数据为: i= 210
写入数据为: i= 211
写入数据为: i= 212
写入数据为: i= 213
写入数据为: i= 214
写入数据为: i= 215
写入数据为: i= 216
写入数据为: i= 217
写入数据为: i= 218
写入数据为: i= 219
写入数据为: i= 220
写入数据为: i= 221
写入数据为: i= 222
写入数据为: i= 223
写入数据为: i= 224
写入数据为: i= 225
写入数据为: i= 226
写入数据为: i= 227
写入数据为: i= 228
写入数据为: i= 229
写入数据为: i= 230
写入数据为: i= 231
写入数据为: i= 232
写入数据为: i= 233
写入数据为: i= 234
写入数据为: i= 235
写入数据为: i= 236
写入数据为: i= 237
写入数据为: i= 238
写入数据为: i= 239
写入数据为: i= 240
写入数据为: i= 241
写入数据为: i= 242
写入数据为: i= 243
写入数据为: i= 244
写入数据为: i= 245
写入数据为: i= 246
写入数据为: i= 247
写入数据为: i= 248
写入数据为: i= 249
写入数据为: i= 250
写入数据为: i= 251
写入数据为: i= 252
写入数据为: i= 253
写入数据为: i= 254
写入数据为: i= 255
写入数据为: i= 256
写入数据为: i= 257
写入数据为: i= 258
写入数据为: i= 259
写入数据为: i= 260
写入数据为: i= 261
写入数据为: i= 262
写入数据为: i= 263
写入数据为: i= 264
写入数据为: i= 265
写入数据为: i= 266
写入数据为: i= 267
写入数据为: i= 268
写入数据为: i= 269
写入数据为: i= 270
写入数据为: i= 271
写入数据为: i= 272
写入数据为: i= 273
写入数据为: i= 274
写入数据为: i= 275
写入数据为: i= 276
写入数据为: i= 277
写入数据为: i= 278
写入数据为: i= 279
写入数据为: i= 280
写入数据为: i= 281
写入数据为: i= 282
写入数据为: i= 283
写入数据为: i= 284
写入数据为: i= 285
写入数据为: i= 286
写入数据为: i= 287
写入数据为: i= 288
写入数据为: i= 289
写入数据为: i= 290
写入数据为: i= 291
写入数据为: i= 292
写入数据为: i= 293
写入数据为: i= 294
写入数据为: i= 295
写入数据为: i= 296
写入数据为: i= 297
写入数据为: i= 298
写入数据为: i= 299
写入数据为: i= 300
写入数据为: i= 301
写入数据为: i= 302
写入数据为: i= 303
写入数据为: i= 304
写入数据为: i= 305
写入数据为: i= 306
写入数据为: i= 307
写入数据为: i= 308
写入数据为: i= 309
写入数据为: i= 310
写入数据为: i= 311
写入数据为: i= 312
写入数据为: i= 313
写入数据为: i= 314
写入数据为: i= 315
写入数据为: i= 316
写入数据为: i= 317
写入数据为: i= 318
写入数据为: i= 319
写入数据为: i= 320
写入数据为: i= 321
写入数据为: i= 322
写入数据为: i= 323
写入数据为: i= 324
写入数据为: i= 325
写入数据为: i= 326
写入数据为: i= 327
写入数据为: i= 328
写入数据为: i= 329
写入数据为: i= 330
写入数据为: i= 331
写入数据为: i= 332
写入数据为: i= 333
写入数据为: i= 334
写入数据为: i= 335
写入数据为: i= 336
写入数据为: i= 337
写入数据为: i= 338
写入数据为: i= 339
写入数据为: i= 340
写入数据为: i= 341
写入数据为: i= 342
写入数据为: i= 343
写入数据为: i= 344
写入数据为: i= 345
写入数据为: i= 346
写入数据为: i= 347
写入数据为: i= 348
写入数据为: i= 349
写入数据为: i= 350
写入数据为: i= 351
写入数据为: i= 352
写入数据为: i= 353
写入数据为: i= 354
写入数据为: i= 355
写入数据为: i= 356
写入数据为: i= 357
写入数据为: i= 358
写入数据为: i= 359
写入数据为: i= 360
写入数据为: i= 361
写入数据为: i= 362
写入数据为: i= 363
写入数据为: i= 364
写入数据为: i= 365
写入数据为: i= 366
写入数据为: i= 367
写入数据为: i= 368
写入数据为: i= 369
写入数据为: i= 370
写入数据为: i= 371
写入数据为: i= 372
写入数据为: i= 373
写入数据为: i= 374
写入数据为: i= 375
写入数据为: i= 376
写入数据为: i= 377
写入数据为: i= 378
写入数据为: i= 379
写入数据为: i= 380
写入数据为: i= 381
写入数据为: i= 382
写入数据为: i= 383
写入数据为: i= 384
写入数据为: i= 385
写入数据为: i= 386
写入数据为: i= 387
写入数据为: i= 388
写入数据为: i= 389
写入数据为: i= 390
写入数据为: i= 391
写入数据为: i= 392
写入数据为: i= 393
写入数据为: i= 394
写入数据为: i= 395
写入数据为: i= 396
写入数据为: i= 397
写入数据为: i= 398
写入数据为: i= 399
写入数据为: i= 400
写入数据为: i= 401
写入数据为: i= 402
写入数据为: i= 403
写入数据为: i= 404
写入数据为: i= 405
写入数据为: i= 406
写入数据为: i= 407
写入数据为: i= 408
写入数据为: i= 409
写入数据为: i= 410
写入数据为: i= 411
写入数据为: i= 412
写入数据为: i= 413
写入数据为: i= 414
写入数据为: i= 415
写入数据为: i= 416
写入数据为: i= 417
写入数据为: i= 418
写入数据为: i= 419
写入数据为: i= 420
写入数据为: i= 421
写入数据为: i= 422
写入数据为: i= 423
写入数据为: i= 424
写入数据为: i= 425
写入数据为: i= 426
写入数据为: i= 427
写入数据为: i= 428
写入数据为: i= 429
写入数据为: i= 430
写入数据为: i= 431
写入数据为: i= 432
写入数据为: i= 433
写入数据为: i= 434
写入数据为: i= 435
写入数据为: i= 436
写入数据为: i= 437
写入数据为: i= 438
写入数据为: i= 439
写入数据为: i= 440
写入数据为: i= 441
写入数据为: i= 442
写入数据为: i= 443
写入数据为: i= 444
写入数据为: i= 445
写入数据为: i= 446
写入数据为: i= 447
写入数据为: i= 448
写入数据为: i= 449
写入数据为: i= 450
写入数据为: i= 451
写入数据为: i= 452
写入数据为: i= 453
写入数据为: i= 454
写入数据为: i= 455
写入数据为: i= 456
写入数据为: i= 457
写入数据为: i= 458
写入数据为: i= 459
写入数据为: i= 460
写入数据为: i= 461
写入数据为: i= 462
写入数据为: i= 463
写入数据为: i= 464
写入数据为: i= 465
写入数据为: i= 466
写入数据为: i= 467
写入数据为: i= 468
写入数据为: i= 469
写入数据为: i= 470
写入数据为: i= 471
写入数据为: i= 472
写入数据为: i= 473
写入数据为: i= 474
写入数据为: i= 475
写入数据为: i= 476
写入数据为: i= 477
写入数据为: i= 478
写入数据为: i= 479
写入数据为: i= 480
写入数据为: i= 481
写入数据为: i= 482
写入数据为: i= 483
写入数据为: i= 484
写入数据为: i= 485
写入数据为: i= 486
写入数据为: i= 487
写入数据为: i= 488
写入数据为: i= 489
写入数据为: i= 490
写入数据为: i= 491
写入数据为: i= 492
写入数据为: i= 493
写入数据为: i= 494
写入数据为: i= 495
写入数据为: i= 496
写入数据为: i= 497
写入数据为: i= 498
写入数据为: i= 499
写入数据为: i= 500
写入数据为: i= 501
写入数据为: i= 502
写入数据为: i= 503
写入数据为: i= 504
写入数据为: i= 505
写入数据为: i= 506
写入数据为: i= 507
写入数据为: i= 508
写入数据为: i= 509
写入数据为: i= 510
写入数据为: i= 511
写入数据为: i= 512
写入数据为: i= 513
写入数据为: i= 514
写入数据为: i= 515
写入数据为: i= 516
写入数据为: i= 517
写入数据为: i= 518
写入数据为: i= 519
写入数据为: i= 520
写入数据为: i= 521
写入数据为: i= 522
写入数据为: i= 523
写入数据为: i= 524
写入数据为: i= 525
写入数据为: i= 526
写入数据为: i= 527
写入数据为: i= 528
写入数据为: i= 529
写入数据为: i= 530
写入数据为: i= 531
写入数据为: i= 532
写入数据为: i= 533
写入数据为: i= 534
写入数据为: i= 535
写入数据为: i= 536
写入数据为: i= 537
写入数据为: i= 538
写入数据为: i= 539
写入数据为: i= 540
写入数据为: i= 541
写入数据为: i= 542
写入数据为: i= 543
写入数据为: i= 544
写入数据为: i= 545
写入数据为: i= 546
写入数据为: i= 547
写入数据为: i= 548
写入数据为: i= 549
写入数据为: i= 550
写入数据为: i= 551
写入数据为: i= 552
写入数据为: i= 553
写入数据为: i= 554
写入数据为: i= 555
写入数据为: i= 556
写入数据为: i= 557
写入数据为: i= 558
写入数据为: i= 559
写入数据为: i= 560
写入数据为: i= 561
写入数据为: i= 562
写入数据为: i= 563
写入数据为: i= 564
写入数据为: i= 565
写入数据为: i= 566
写入数据为: i= 567
写入数据为: i= 568
写入数据为: i= 569
写入数据为: i= 570
写入数据为: i= 571
写入数据为: i= 572
写入数据为: i= 573
写入数据为: i= 574
写入数据为: i= 575
写入数据为: i= 576
写入数据为: i= 577
写入数据为: i= 578
写入数据为: i= 579
写入数据为: i= 580
写入数据为: i= 581
写入数据为: i= 582
写入数据为: i= 583
写入数据为: i= 584
写入数据为: i= 585
写入数据为: i= 586
写入数据为: i= 587
写入数据为: i= 588
写入数据为: i= 589
写入数据为: i= 590
写入数据为: i= 591
写入数据为: i= 592
写入数据为: i= 593
写入数据为: i= 594
写入数据为: i= 595
写入数据为: i= 596
写入数据为: i= 597
写入数据为: i= 598
写入数据为: i= 599
写入数据为: i= 600
写入数据为: i= 601
写入数据为: i= 602
写入数据为: i= 603
写入数据为: i= 604
写入数据为: i= 605
写入数据为: i= 606
写入数据为: i= 607
写入数据为: i= 608
写入数据为: i= 609
写入数据为: i= 610
写入数据为: i= 611
写入数据为: i= 612
写入数据为: i= 613
写入数据为: i= 614
写入数据为: i= 615
写入数据为: i= 616
写入数据为: i= 617
写入数据为: i= 618
写入数据为: i= 619
写入数据为: i= 620
写入数据为: i= 621
写入数据为: i= 622
写入数据为: i= 623
写入数据为: i= 624
写入数据为: i= 625
写入数据为: i= 626
写入数据为: i= 627
写入数据为: i= 628
写入数据为: i= 629
写入数据为: i= 630
写入数据为: i= 631
写入数据为: i= 632
写入数据为: i= 633
写入数据为: i= 634
写入数据为: i= 635
写入数据为: i= 636
写入数据为: i= 637
写入数据为: i= 638
写入数据为: i= 639
写入数据为: i= 640
写入数据为: i= 641
写入数据为: i= 642
写入数据为: i= 643
写入数据为: i= 644
写入数据为: i= 645
写入数据为: i= 646
写入数据为: i= 647
写入数据为: i= 648
写入数据为: i= 649
写入数据为: i= 650
写入数据为: i= 651
写入数据为: i= 652
写入数据为: i= 653
写入数据为: i= 654
写入数据为: i= 655
写入数据为: i= 656
写入数据为: i= 657
写入数据为: i= 658
写入数据为: i= 659
写入数据为: i= 660
写入数据为: i= 661
写入数据为: i= 662
写入数据为: i= 663
写入数据为: i= 664
写入数据为: i= 665
写入数据为: i= 666
写入数据为: i= 667
写入数据为: i= 668
写入数据为: i= 669
写入数据为: i= 670
写入数据为: i= 671
写入数据为: i= 672
写入数据为: i= 673
写入数据为: i= 674
写入数据为: i= 675
写入数据为: i= 676
写入数据为: i= 677
写入数据为: i= 678
写入数据为: i= 679
写入数据为: i= 680
写入数据为: i= 681
写入数据为: i= 682
写入数据为: i= 683
写入数据为: i= 684
写入数据为: i= 685
写入数据为: i= 686
写入数据为: i= 687
写入数据为: i= 688
写入数据为: i= 689
写入数据为: i= 690
写入数据为: i= 691
写入数据为: i= 692
写入数据为: i= 693
写入数据为: i= 694
写入数据为: i= 695
写入数据为: i= 696
写入数据为: i= 697
写入数据为: i= 698
写入数据为: i= 699
写入数据为: i= 700
写入数据为: i= 701
写入数据为: i= 702
写入数据为: i= 703
写入数据为: i= 704
写入数据为: i= 705
写入数据为: i= 706
写入数据为: i= 707
写入数据为: i= 708
写入数据为: i= 709
写入数据为: i= 710
写入数据为: i= 711
写入数据为: i= 712
写入数据为: i= 713
写入数据为: i= 714
写入数据为: i= 715
写入数据为: i= 716
写入数据为: i= 717
写入数据为: i= 718
写入数据为: i= 719
写入数据为: i= 720
写入数据为: i= 721
写入数据为: i= 722
写入数据为: i= 723
写入数据为: i= 724
写入数据为: i= 725
写入数据为: i= 726
写入数据为: i= 727
写入数据为: i= 728
写入数据为: i= 729
写入数据为: i= 730
写入数据为: i= 731
写入数据为: i= 732
写入数据为: i= 733
写入数据为: i= 734
写入数据为: i= 735
写入数据为: i= 736
写入数据为: i= 737
写入数据为: i= 738
写入数据为: i= 739
写入数据为: i= 740
写入数据为: i= 741
写入数据为: i= 742
写入数据为: i= 743
写入数据为: i= 744
写入数据为: i= 745
写入数据为: i= 746
写入数据为: i= 747
写入数据为: i= 748
写入数据为: i= 749
写入数据为: i= 750
写入数据为: i= 751
写入数据为: i= 752
写入数据为: i= 753
写入数据为: i= 754
写入数据为: i= 755
写入数据为: i= 756
写入数据为: i= 757
写入数据为: i= 758
写入数据为: i= 759
写入数据为: i= 760
写入数据为: i= 761
写入数据为: i= 762
写入数据为: i= 763
写入数据为: i= 764
写入数据为: i= 765
写入数据为: i= 766
写入数据为: i= 767
写入数据为: i= 768
写入数据为: i= 769
写入数据为: i= 770
写入数据为: i= 771
写入数据为: i= 772
写入数据为: i= 773
写入数据为: i= 774
写入数据为: i= 775
写入数据为: i= 776
写入数据为: i= 777
写入数据为: i= 778
写入数据为: i= 779
写入数据为: i= 780
写入数据为: i= 781
写入数据为: i= 782
写入数据为: i= 783
写入数据为: i= 784
写入数据为: i= 785
写入数据为: i= 786
写入数据为: i= 787
写入数据为: i= 788
写入数据为: i= 789
写入数据为: i= 790
写入数据为: i= 791
写入数据为: i= 792
写入数据为: i= 793
写入数据为: i= 794
写入数据为: i= 795
写入数据为: i= 796
写入数据为: i= 797
写入数据为: i= 798
写入数据为: i= 799
写入数据为: i= 800
写入数据为: i= 801
写入数据为: i= 802
写入数据为: i= 803
写入数据为: i= 804
写入数据为: i= 805
写入数据为: i= 806
写入数据为: i= 807
写入数据为: i= 808
写入数据为: i= 809
写入数据为: i= 810
写入数据为: i= 811
写入数据为: i= 812
写入数据为: i= 813
写入数据为: i= 814
写入数据为: i= 815
写入数据为: i= 816
写入数据为: i= 817
写入数据为: i= 818
写入数据为: i= 819
写入数据为: i= 820
写入数据为: i= 821
写入数据为: i= 822
写入数据为: i= 823
写入数据为: i= 824
写入数据为: i= 825
写入数据为: i= 826
写入数据为: i= 827
写入数据为: i= 828
写入数据为: i= 829
写入数据为: i= 830
写入数据为: i= 831
写入数据为: i= 832
写入数据为: i= 833
读取到的值为 :183
读取第249次
读取到的值为 :184
读取第250次
读取到的值为 :185
读取第251次
读取到的值为 :186
读取第252次
读取到的值为 :187
读取第253次
读取到的值为 :188
读取第254次
读取到的值为 :189
读取第255次
读取到的值为 :190
读取第256次
读取到的值为 :191
读取第257次
读取到的值为 :192
读取第258次
读取到的值为 :193
读取第259次
读取到的值为 :194
读取第260次
读取到的值为 :195
读取第261次
读取到的值为 :196
读取第262次
读取到的值为 :197
读取第263次
读取到的值为 :198
读取第264次
读取到的值为 :199
读取第265次
读取到的值为 :200
读取第266次
读取到的值为 :201
读取第267次
读取到的值为 :202
读取第268次
读取到的值为 :203
读取第269次
读取到的值为 :204
读取第270次
读取到的值为 :205
读取第271次
读取到的值为 :206
读取第272次
读取到的值为 :207
读取第273次
读取到的值为 :208
读取第274次
读取到的值为 :209
读取第275次
读取到的值为 :210
读取第276次
读取到的值为 :211
读取第277次
读取到的值为 :212
读取第278次
读取到的值为 :213
读取第279次
读取到的值为 :214
读取第280次
读取到的值为 :215
读取第281次
读取到的值为 :216
读取第282次
读取到的值为 :217
读取第283次
读取到的值为 :218
读取第284次
读取到的值为 :219
读取第285次
读取到的值为 :220
读取第286次
读取到的值为 :221
读取第287次
读取到的值为 :222
读取第288次
读取到的值为 :223
读取第289次
读取到的值为 :224
读取第290次
读取到的值为 :225
读取第291次
读取到的值为 :226
读取第292次
读取到的值为 :227
读取第293次
读取到的值为 :228
读取第294次
读取到的值为 :229
读取第295次
读取到的值为 :230
读取第296次
读取到的值为 :231
读取第297次
读取到的值为 :232
读取第298次
读取到的值为 :233
读取第299次
读取到的值为 :234
读取第300次
读取到的值为 :235
读取第301次
读取到的值为 :236
读取第302次
读取到的值为 :237
读取第303次
读取到的值为 :238
读取第304次
读取到的值为 :239
读取第305次
读取到的值为 :240
读取第306次
读取到的值为 :241
读取第307次
读取到的值为 :242
读取第308次
写入数据为: i= 834
写入数据为: i= 835
写入数据为: i= 836
写入数据为: i= 837
写入数据为: i= 838
写入数据为: i= 839
写入数据为: i= 840
写入数据为: i= 841
写入数据为: i= 842
写入数据为: i= 843
写入数据为: i= 844
写入数据为: i= 845
写入数据为: i= 846
写入数据为: i= 847
写入数据为: i= 848
写入数据为: i= 849
写入数据为: i= 850
写入数据为: i= 851
写入数据为: i= 852
写入数据为: i= 853
写入数据为: i= 854
写入数据为: i= 855
写入数据为: i= 856
写入数据为: i= 857
写入数据为: i= 858
写入数据为: i= 859
写入数据为: i= 860
写入数据为: i= 861
写入数据为: i= 862
写入数据为: i= 863
写入数据为: i= 864
写入数据为: i= 865
写入数据为: i= 866
写入数据为: i= 867
写入数据为: i= 868
写入数据为: i= 869
写入数据为: i= 870
写入数据为: i= 871
写入数据为: i= 872
写入数据为: i= 873
写入数据为: i= 874
写入数据为: i= 875
写入数据为: i= 876
写入数据为: i= 877
写入数据为: i= 878
写入数据为: i= 879
写入数据为: i= 880
写入数据为: i= 881
写入数据为: i= 882
写入数据为: i= 883
写入数据为: i= 884
写入数据为: i= 885
写入数据为: i= 886
写入数据为: i= 887
写入数据为: i= 888
写入数据为: i= 889
写入数据为: i= 890
写入数据为: i= 891
写入数据为: i= 892
写入数据为: i= 893
写入数据为: i= 894
写入数据为: i= 895
写入数据为: i= 896
写入数据为: i= 897
写入数据为: i= 898
写入数据为: i= 899
写入数据为: i= 900
写入数据为: i= 901
写入数据为: i= 902
写入数据为: i= 903
写入数据为: i= 904
写入数据为: i= 905
写入数据为: i= 906
写入数据为: i= 907
写入数据为: i= 908
写入数据为: i= 909
写入数据为: i= 910
写入数据为: i= 911
写入数据为: i= 912
写入数据为: i= 913
写入数据为: i= 914
写入数据为: i= 915
写入数据为: i= 916
写入数据为: i= 917
写入数据为: i= 918
写入数据为: i= 919
写入数据为: i= 920
写入数据为: i= 921
写入数据为: i= 922
写入数据为: i= 923
写入数据为: i= 924
写入数据为: i= 925
写入数据为: i= 926
写入数据为: i= 927
写入数据为: i= 928
写入数据为: i= 929
写入数据为: i= 930
写入数据为: i= 931
写入数据为: i= 932
写入数据为: i= 933
写入数据为: i= 934
写入数据为: i= 935
写入数据为: i= 936
写入数据为: i= 937
写入数据为: i= 938
写入数据为: i= 939
写入数据为: i= 940
写入数据为: i= 941
写入数据为: i= 942
写入数据为: i= 943
写入数据为: i= 944
写入数据为: i= 945
写入数据为: i= 946
写入数据为: i= 947
写入数据为: i= 948
写入数据为: i= 949
写入数据为: i= 950
写入数据为: i= 951
写入数据为: i= 952
写入数据为: i= 953
写入数据为: i= 954
写入数据为: i= 955
写入数据为: i= 956
写入数据为: i= 957
写入数据为: i= 958
写入数据为: i= 959
写入数据为: i= 960
写入数据为: i= 961
写入数据为: i= 962
写入数据为: i= 963
写入数据为: i= 964
写入数据为: i= 965
写入数据为: i= 966
写入数据为: i= 967
写入数据为: i= 968
写入数据为: i= 969
写入数据为: i= 970
写入数据为: i= 971
写入数据为: i= 972
写入数据为: i= 973
写入数据为: i= 974
写入数据为: i= 975
读取到的值为 :243
读取第309次
读取到的值为 :244
读取第310次
读取到的值为 :245
读取第311次
读取到的值为 :246
读取第312次
读取到的值为 :247
读取第313次
读取到的值为 :248
读取第314次
读取到的值为 :249
读取第315次
读取到的值为 :250
读取第316次
读取到的值为 :251
读取第317次
读取到的值为 :252
读取第318次
读取到的值为 :253
读取第319次
读取到的值为 :254
读取第320次
读取到的值为 :255
读取第321次
读取到的值为 :256
读取第322次
读取到的值为 :257
读取第323次
读取到的值为 :258
读取第324次
读取到的值为 :259
读取第325次
读取到的值为 :260
读取第326次
读取到的值为 :261
读取第327次
读取到的值为 :262
读取第328次
读取到的值为 :263
读取第329次
读取到的值为 :264
读取第330次
读取到的值为 :265
读取第331次
读取到的值为 :266
读取第332次
读取到的值为 :267
读取第333次
读取到的值为 :268
读取第334次
读取到的值为 :269
读取第335次
读取到的值为 :270
读取第336次
读取到的值为 :271
读取第337次
读取到的值为 :272
读取第338次
读取到的值为 :273
读取第339次
读取到的值为 :274
读取第340次
读取到的值为 :275
读取第341次
读取到的值为 :276
读取第342次
读取到的值为 :277
读取第343次
读取到的值为 :278
读取第344次
读取到的值为 :279
读取第345次
读取到的值为 :280
读取第346次
读取到的值为 :281
读取第347次
读取到的值为 :282
读取第348次
读取到的值为 :283
读取第349次
读取到的值为 :284
读取第350次
读取到的值为 :285
读取第351次
读取到的值为 :286
读取第352次
读取到的值为 :287
读取第353次
读取到的值为 :288
读取第354次
读取到的值为 :289
读取第355次
读取到的值为 :290
读取第356次
读取到的值为 :291
读取第357次
读取到的值为 :292
读取第358次
读取到的值为 :293
读取第359次
读取到的值为 :294
读取第360次
读取到的值为 :295
读取第361次
读取到的值为 :296
读取第362次
读取到的值为 :297
读取第363次
读取到的值为 :298
读取第364次
读取到的值为 :299
读取第365次
读取到的值为 :300
读取第366次
读取到的值为 :301
读取第367次
读取到的值为 :302
读取第368次
读取到的值为 :303
读取第369次
读取到的值为 :304
读取第370次
读取到的值为 :305
读取第371次
读取到的值为 :306
读取第372次
读取到的值为 :307
读取第373次
读取到的值为 :308
读取第374次
读取到的值为 :309
读取第375次
读取到的值为 :310
读取第376次
读取到的值为 :311
读取第377次
读取到的值为 :312
读取第378次
读取到的值为 :313
读取第379次
读取到的值为 :314
读取第380次
读取到的值为 :315
读取第381次
读取到的值为 :316
读取第382次
读取到的值为 :317
读取第383次
读取到的值为 :318
读取第384次
读取到的值为 :319
读取第385次
读取到的值为 :320
读取第386次
读取到的值为 :321
读取第387次
读取到的值为 :322
读取第388次
读取到的值为 :323
读取第389次
读取到的值为 :324
读取第390次
读取到的值为 :325
读取第391次
读取到的值为 :326
读取第392次
读取到的值为 :327
读取第393次
读取到的值为 :328
读取第394次
读取到的值为 :329
读取第395次
读取到的值为 :330
读取第396次
读取到的值为 :331
读取第397次
读取到的值为 :332
读取第398次
读取到的值为 :333
读取第399次
读取到的值为 :334
读取第400次
读取到的值为 :335
读取第401次
读取到的值为 :336
读取第402次
读取到的值为 :337
读取第403次
读取到的值为 :338
读取第404次
读取到的值为 :339
读取第405次
读取到的值为 :340
读取第406次
读取到的值为 :341
读取第407次
读取到的值为 :342
读取第408次
读取到的值为 :343
读取第409次
读取到的值为 :344
读取第410次
读取到的值为 :345
读取第411次
读取到的值为 :346
读取第412次
读取到的值为 :347
读取第413次
读取到的值为 :348
读取第414次
读取到的值为 :349
读取第415次
读取到的值为 :350
读取第416次
读取到的值为 :351
读取第417次
读取到的值为 :352
读取第418次
读取到的值为 :353
读取第419次
读取到的值为 :354
读取第420次
读取到的值为 :355
读取第421次
读取到的值为 :356
读取第422次
读取到的值为 :357
读取第423次
读取到的值为 :358
读取第424次
读取到的值为 :359
读取第425次
读取到的值为 :360
读取第426次
读取到的值为 :361
读取第427次
读取到的值为 :362
读取第428次
读取到的值为 :363
读取第429次
读取到的值为 :364
读取第430次
读取到的值为 :365
读取第431次
读取到的值为 :366
读取第432次
读取到的值为 :367
读取第433次
读取到的值为 :368
读取第434次
读取到的值为 :369
读取第435次
读取到的值为 :370
读取第436次
读取到的值为 :371
读取第437次
读取到的值为 :372
读取第438次
读取到的值为 :373
读取第439次
读取到的值为 :374
读取第440次
读取到的值为 :375
读取第441次
读取到的值为 :376
读取第442次
读取到的值为 :377
读取第443次
读取到的值为 :378
读取第444次
读取到的值为 :379
读取第445次
读取到的值为 :380
读取第446次
读取到的值为 :381
读取第447次
读取到的值为 :382
读取第448次
读取到的值为 :383
读取第449次
读取到的值为 :384
读取第450次
读取到的值为 :385
读取第451次
读取到的值为 :386
读取第452次
读取到的值为 :387
读取第453次
读取到的值为 :388
读取第454次
读取到的值为 :389
读取第455次
读取到的值为 :390
读取第456次
读取到的值为 :391
读取第457次
读取到的值为 :392
读取第458次
读取到的值为 :393
读取第459次
读取到的值为 :394
读取第460次
读取到的值为 :395
读取第461次
读取到的值为 :396
读取第462次
读取到的值为 :397
读取第463次
读取到的值为 :398
读取第464次
读取到的值为 :399
读取第465次
读取到的值为 :400
读取第466次
读取到的值为 :401
读取第467次
读取到的值为 :402
读取第468次
读取到的值为 :403
读取第469次
读取到的值为 :404
读取第470次
读取到的值为 :405
读取第471次
读取到的值为 :406
读取第472次
读取到的值为 :407
读取第473次
读取到的值为 :408
读取第474次
写入数据为: i= 976
写入数据为: i= 977
写入数据为: i= 978
写入数据为: i= 979
写入数据为: i= 980
写入数据为: i= 981
写入数据为: i= 982
写入数据为: i= 983
写入数据为: i= 984
写入数据为: i= 985
写入数据为: i= 986
写入数据为: i= 987
写入数据为: i= 988
写入数据为: i= 989
写入数据为: i= 990
写入数据为: i= 991
写入数据为: i= 992
写入数据为: i= 993
写入数据为: i= 994
写入数据为: i= 995
写入数据为: i= 996
写入数据为: i= 997
写入数据为: i= 998
写入数据为: i= 999
读取到的值为 :409
读取第475次
读取到的值为 :410
读取第476次
读取到的值为 :411
读取第477次
读取到的值为 :412
读取第478次
读取到的值为 :413
读取第479次
读取到的值为 :414
读取第480次
读取到的值为 :415
读取第481次
读取到的值为 :416
读取第482次
读取到的值为 :417
读取第483次
读取到的值为 :418
读取第484次
读取到的值为 :419
读取第485次
读取到的值为 :420
读取第486次
读取到的值为 :421
读取第487次
读取到的值为 :422
读取第488次
读取到的值为 :423
读取第489次
读取到的值为 :424
读取第490次
读取到的值为 :425
读取第491次
读取到的值为 :426
读取第492次
读取到的值为 :427
读取第493次
读取到的值为 :428
读取第494次
读取到的值为 :429
读取第495次
读取到的值为 :430
读取第496次
读取到的值为 :431
读取第497次
读取到的值为 :432
读取第498次
读取到的值为 :433
读取第499次
读取到的值为 :434
读取第500次
读取到的值为 :435
读取第501次
读取到的值为 :436
读取第502次
读取到的值为 :437
读取第503次
读取到的值为 :438
读取第504次
读取到的值为 :439
读取第505次
读取到的值为 :440
读取第506次
读取到的值为 :441
读取第507次
读取到的值为 :442
读取第508次
读取到的值为 :443
读取第509次
读取到的值为 :444
读取第510次
读取到的值为 :445
读取第511次
读取到的值为 :446
读取第512次
读取到的值为 :447
读取第513次
读取到的值为 :448
读取第514次
读取到的值为 :449
读取第515次
读取到的值为 :450
读取第516次
读取到的值为 :451
读取第517次
读取到的值为 :452
读取第518次
读取到的值为 :453
读取第519次
读取到的值为 :454
读取第520次
读取到的值为 :455
读取第521次
读取到的值为 :456
读取第522次
读取到的值为 :457
读取第523次
读取到的值为 :458
读取第524次
读取到的值为 :459
读取第525次
读取到的值为 :460
读取第526次
读取到的值为 :461
读取第527次
读取到的值为 :462
读取第528次
读取到的值为 :463
读取第529次
读取到的值为 :464
读取第530次
读取到的值为 :465
读取第531次
读取到的值为 :466
读取第532次
读取到的值为 :467
读取第533次
读取到的值为 :468
读取第534次
读取到的值为 :469
读取第535次
读取到的值为 :470
读取第536次
读取到的值为 :471
读取第537次
读取到的值为 :472
读取第538次
读取到的值为 :473
读取第539次
读取到的值为 :474
读取第540次
读取到的值为 :475
读取第541次
读取到的值为 :476
读取第542次
读取到的值为 :477
读取第543次
读取到的值为 :478
读取第544次
读取到的值为 :479
读取第545次
读取到的值为 :480
读取第546次
读取到的值为 :481
读取第547次
读取到的值为 :482
读取第548次
读取到的值为 :483
读取第549次
读取到的值为 :484
读取第550次
读取到的值为 :485
读取第551次
读取到的值为 :486
读取第552次
读取到的值为 :487
读取第553次
读取到的值为 :488
读取第554次
读取到的值为 :489
读取第555次
读取到的值为 :490
读取第556次
读取到的值为 :491
读取第557次
读取到的值为 :492
读取第558次
读取到的值为 :493
读取第559次
读取到的值为 :494
读取第560次
读取到的值为 :495
读取第561次
读取到的值为 :496
读取第562次
读取到的值为 :497
读取第563次
读取到的值为 :498
读取第564次
读取到的值为 :499
读取第565次
读取到的值为 :500
读取第566次
读取到的值为 :501
读取第567次
读取到的值为 :502
读取第568次
读取到的值为 :503
读取第569次
读取到的值为 :504
读取第570次
读取到的值为 :505
读取第571次
读取到的值为 :506
读取第572次
读取到的值为 :507
读取第573次
读取到的值为 :508
读取第574次
读取到的值为 :509
读取第575次
读取到的值为 :510
读取第576次
读取到的值为 :511
读取第577次
读取到的值为 :512
读取第578次
读取到的值为 :513
读取第579次
读取到的值为 :514
读取第580次
读取到的值为 :515
读取第581次
读取到的值为 :516
读取第582次
读取到的值为 :517
读取第583次
读取到的值为 :518
读取第584次
读取到的值为 :519
读取第585次
读取到的值为 :520
读取第586次
读取到的值为 :521
读取第587次
读取到的值为 :522
读取第588次
读取到的值为 :523
读取第589次
读取到的值为 :524
读取第590次
读取到的值为 :525
读取第591次
读取到的值为 :526
读取第592次
读取到的值为 :527
读取第593次
读取到的值为 :528
读取第594次
读取到的值为 :529
读取第595次
读取到的值为 :530
读取第596次
读取到的值为 :531
读取第597次
读取到的值为 :532
读取第598次
读取到的值为 :533
读取第599次
读取到的值为 :534
读取第600次
读取到的值为 :535
读取第601次
读取到的值为 :536
读取第602次
读取到的值为 :537
读取第603次
读取到的值为 :538
读取第604次
读取到的值为 :539
读取第605次
读取到的值为 :540
读取第606次
读取到的值为 :541
读取第607次
读取到的值为 :542
读取第608次
读取到的值为 :543
读取第609次
读取到的值为 :544
读取第610次
读取到的值为 :545
读取第611次
读取到的值为 :546
读取第612次
读取到的值为 :547
读取第613次
读取到的值为 :548
读取第614次
读取到的值为 :549
读取第615次
读取到的值为 :550
读取第616次
读取到的值为 :551
读取第617次
读取到的值为 :552
读取第618次
读取到的值为 :553
读取第619次
读取到的值为 :554
读取第620次
读取到的值为 :555
读取第621次
读取到的值为 :556
读取第622次
读取到的值为 :557
读取第623次
读取到的值为 :558
读取第624次
读取到的值为 :559
读取第625次
读取到的值为 :560
读取第626次
读取到的值为 :561
读取第627次
读取到的值为 :562
读取第628次
读取到的值为 :563
读取第629次
读取到的值为 :564
读取第630次
读取到的值为 :565
读取第631次
读取到的值为 :566
读取第632次
读取到的值为 :567
读取第633次
读取到的值为 :568
读取第634次
读取到的值为 :569
读取第635次
读取到的值为 :570
读取第636次
读取到的值为 :571
读取第637次
读取到的值为 :572
读取第638次
读取到的值为 :573
读取第639次
读取到的值为 :574
读取第640次
读取到的值为 :575
读取第641次
读取到的值为 :576
读取第642次
读取到的值为 :577
读取第643次
读取到的值为 :578
读取第644次
读取到的值为 :579
读取第645次
读取到的值为 :580
读取第646次
读取到的值为 :581
读取第647次
读取到的值为 :582
读取第648次
读取到的值为 :583
读取第649次
读取到的值为 :584
读取第650次
读取到的值为 :585
读取第651次
读取到的值为 :586
读取第652次
读取到的值为 :587
读取第653次
读取到的值为 :588
读取第654次
读取到的值为 :589
读取第655次
读取到的值为 :590
读取第656次
读取到的值为 :591
读取第657次
读取到的值为 :592
读取第658次
读取到的值为 :593
读取第659次
读取到的值为 :594
读取第660次
读取到的值为 :595
读取第661次
读取到的值为 :596
读取第662次
读取到的值为 :597
读取第663次
读取到的值为 :598
读取第664次
读取到的值为 :599
读取第665次
读取到的值为 :600
读取第666次
读取到的值为 :601
读取第667次
读取到的值为 :602
读取第668次
读取到的值为 :603
读取第669次
读取到的值为 :604
读取第670次
读取到的值为 :605
读取第671次
读取到的值为 :606
读取第672次
读取到的值为 :607
读取第673次
读取到的值为 :608
读取第674次
读取到的值为 :609
读取第675次
读取到的值为 :610
读取第676次
读取到的值为 :611
读取第677次
读取到的值为 :612
读取第678次
读取到的值为 :613
读取第679次
读取到的值为 :614
读取第680次
读取到的值为 :615
读取第681次
读取到的值为 :616
读取第682次
读取到的值为 :617
读取第683次
读取到的值为 :618
读取第684次
读取到的值为 :619
读取第685次
读取到的值为 :620
读取第686次
读取到的值为 :621
读取第687次
读取到的值为 :622
读取第688次
读取到的值为 :623
读取第689次
读取到的值为 :624
读取第690次
读取到的值为 :625
读取第691次
读取到的值为 :626
读取第692次
读取到的值为 :627
读取第693次
读取到的值为 :628
读取第694次
读取到的值为 :629
读取第695次
读取到的值为 :630
读取第696次
读取到的值为 :631
读取第697次
读取到的值为 :632
读取第698次
读取到的值为 :633
读取第699次
读取到的值为 :634
读取第700次
读取到的值为 :635
读取第701次
读取到的值为 :636
读取第702次
读取到的值为 :637
读取第703次
读取到的值为 :638
读取第704次
读取到的值为 :639
读取第705次
读取到的值为 :640
读取第706次
读取到的值为 :641
读取第707次
读取到的值为 :642
读取第708次
读取到的值为 :643
读取第709次
读取到的值为 :644
读取第710次
读取到的值为 :645
读取第711次
读取到的值为 :646
读取第712次
读取到的值为 :647
读取第713次
读取到的值为 :648
读取第714次
读取到的值为 :649
读取第715次
读取到的值为 :650
读取第716次
读取到的值为 :651
读取第717次
读取到的值为 :652
读取第718次
读取到的值为 :653
读取第719次
读取到的值为 :654
读取第720次
读取到的值为 :655
读取第721次
读取到的值为 :656
读取第722次
读取到的值为 :657
读取第723次
读取到的值为 :658
读取第724次
读取到的值为 :659
读取第725次
读取到的值为 :660
读取第726次
读取到的值为 :661
读取第727次
读取到的值为 :662
读取第728次
读取到的值为 :663
读取第729次
读取到的值为 :664
读取第730次
读取到的值为 :665
读取第731次
读取到的值为 :666
读取第732次
读取到的值为 :667
读取第733次
读取到的值为 :668
读取第734次
读取到的值为 :669
读取第735次
读取到的值为 :670
读取第736次
读取到的值为 :671
读取第737次
读取到的值为 :672
读取第738次
读取到的值为 :673
读取第739次
读取到的值为 :674
读取第740次
读取到的值为 :675
读取第741次
读取到的值为 :676
读取第742次
读取到的值为 :677
读取第743次
读取到的值为 :678
读取第744次
读取到的值为 :679
读取第745次
读取到的值为 :680
读取第746次
读取到的值为 :681
读取第747次
读取到的值为 :682
读取第748次
读取到的值为 :683
读取第749次
读取到的值为 :684
读取第750次
读取到的值为 :685
读取第751次
读取到的值为 :686
读取第752次
读取到的值为 :687
读取第753次
读取到的值为 :688
读取第754次
读取到的值为 :689
读取第755次
读取到的值为 :690
读取第756次
读取到的值为 :691
读取第757次
读取到的值为 :692
读取第758次
读取到的值为 :693
读取第759次
读取到的值为 :694
读取第760次
读取到的值为 :695
读取第761次
读取到的值为 :696
读取第762次
读取到的值为 :697
读取第763次
读取到的值为 :698
读取第764次
读取到的值为 :699
读取第765次
读取到的值为 :700
读取第766次
读取到的值为 :701
读取第767次
读取到的值为 :702
读取第768次
读取到的值为 :703
读取第769次
读取到的值为 :704
读取第770次
读取到的值为 :705
读取第771次
读取到的值为 :706
读取第772次
读取到的值为 :707
读取第773次
读取到的值为 :708
读取第774次
读取到的值为 :709
读取第775次
读取到的值为 :710
读取第776次
读取到的值为 :711
读取第777次
读取到的值为 :712
读取第778次
读取到的值为 :713
读取第779次
读取到的值为 :714
读取第780次
读取到的值为 :715
读取第781次
读取到的值为 :716
读取第782次
读取到的值为 :717
读取第783次
读取到的值为 :718
读取第784次
读取到的值为 :719
读取第785次
读取到的值为 :720
读取第786次
读取到的值为 :721
读取第787次
读取到的值为 :722
读取第788次
读取到的值为 :723
读取第789次
读取到的值为 :724
读取第790次
读取到的值为 :725
读取第791次
读取到的值为 :726
读取第792次
读取到的值为 :727
读取第793次
读取到的值为 :728
读取第794次
读取到的值为 :729
读取第795次
读取到的值为 :730
读取第796次
读取到的值为 :731
读取第797次
读取到的值为 :732
读取第798次
读取到的值为 :733
读取第799次
读取到的值为 :734
读取第800次
读取到的值为 :735
读取第801次
读取到的值为 :736
读取第802次
读取到的值为 :737
读取第803次
读取到的值为 :738
读取第804次
读取到的值为 :739
读取第805次
读取到的值为 :740
读取第806次
读取到的值为 :741
读取第807次
读取到的值为 :742
读取第808次
读取到的值为 :743
读取第809次
读取到的值为 :744
读取第810次
读取到的值为 :745
读取第811次
读取到的值为 :746
读取第812次
读取到的值为 :747
读取第813次
读取到的值为 :748
读取第814次
读取到的值为 :749
读取第815次
读取到的值为 :750
读取第816次
读取到的值为 :751
读取第817次
读取到的值为 :752
读取第818次
读取到的值为 :753
读取第819次
读取到的值为 :754
读取第820次
读取到的值为 :755
读取第821次
读取到的值为 :756
读取第822次
读取到的值为 :757
读取第823次
读取到的值为 :758
读取第824次
读取到的值为 :759
读取第825次
读取到的值为 :760
读取第826次
读取到的值为 :761
读取第827次
读取到的值为 :762
读取第828次
读取到的值为 :763
读取第829次
读取到的值为 :764
读取第830次
读取到的值为 :765
读取第831次
读取到的值为 :766
读取第832次
读取到的值为 :767
读取第833次
读取到的值为 :768
读取第834次
读取到的值为 :769
读取第835次
读取到的值为 :770
读取第836次
读取到的值为 :771
读取第837次
读取到的值为 :772
读取第838次
读取到的值为 :773
读取第839次
读取到的值为 :774
读取第840次
读取到的值为 :775
读取第841次
读取到的值为 :776
读取第842次
读取到的值为 :777
读取第843次
读取到的值为 :778
读取第844次
读取到的值为 :779
读取第845次
读取到的值为 :780
读取第846次
读取到的值为 :781
读取第847次
读取到的值为 :782
读取第848次
读取到的值为 :783
读取第849次
读取到的值为 :784
读取第850次
读取到的值为 :785
读取第851次
读取到的值为 :786
读取第852次
读取到的值为 :787
读取第853次
读取到的值为 :788
读取第854次
读取到的值为 :789
读取第855次
读取到的值为 :790
读取第856次
读取到的值为 :791
读取第857次
读取到的值为 :792
读取第858次
读取到的值为 :793
读取第859次
读取到的值为 :794
读取第860次
读取到的值为 :795
读取第861次
读取到的值为 :796
读取第862次
读取到的值为 :797
读取第863次
读取到的值为 :798
读取第864次
读取到的值为 :799
读取第865次
读取到的值为 :800
读取第866次
读取到的值为 :801
读取第867次
读取到的值为 :802
读取第868次
读取到的值为 :803
读取第869次
读取到的值为 :804
读取第870次
读取到的值为 :805
读取第871次
读取到的值为 :806
读取第872次
读取到的值为 :807
读取第873次
读取到的值为 :808
读取第874次
读取到的值为 :809
读取第875次
读取到的值为 :810
读取第876次
读取到的值为 :811
读取第877次
读取到的值为 :812
读取第878次
读取到的值为 :813
读取第879次
读取到的值为 :814
读取第880次
读取到的值为 :815
读取第881次
读取到的值为 :816
读取第882次
读取到的值为 :817
读取第883次
读取到的值为 :818
读取第884次
读取到的值为 :819
读取第885次
读取到的值为 :820
读取第886次
读取到的值为 :821
读取第887次
读取到的值为 :822
读取第888次
读取到的值为 :823
读取第889次
读取到的值为 :824
读取第890次
读取到的值为 :825
读取第891次
读取到的值为 :826
读取第892次
读取到的值为 :827
读取第893次
读取到的值为 :828
读取第894次
读取到的值为 :829
读取第895次
读取到的值为 :830
读取第896次
读取到的值为 :831
读取第897次
读取到的值为 :832
读取第898次
读取到的值为 :833
读取第899次
读取到的值为 :834
读取第900次
读取到的值为 :835
读取第901次
读取到的值为 :836
读取第902次
读取到的值为 :837
读取第903次
读取到的值为 :838
读取第904次
读取到的值为 :839
读取第905次
读取到的值为 :840
读取第906次
读取到的值为 :841
读取第907次
读取到的值为 :842
读取第908次
读取到的值为 :843
读取第909次
读取到的值为 :844
读取第910次
读取到的值为 :845
读取第911次
读取到的值为 :846
读取第912次
读取到的值为 :847
读取第913次
读取到的值为 :848
读取第914次
读取到的值为 :849
读取第915次
读取到的值为 :850
读取第916次
读取到的值为 :851
读取第917次
读取到的值为 :852
读取第918次
读取到的值为 :853
读取第919次
读取到的值为 :854
读取第920次
读取到的值为 :855
读取第921次
读取到的值为 :856
读取第922次
读取到的值为 :857
读取第923次
读取到的值为 :858
读取第924次
读取到的值为 :859
读取第925次
读取到的值为 :860
读取第926次
读取到的值为 :861
读取第927次
读取到的值为 :862
读取第928次
读取到的值为 :863
读取第929次
读取到的值为 :864
读取第930次
读取到的值为 :865
读取第931次
读取到的值为 :866
读取第932次
读取到的值为 :867
读取第933次
读取到的值为 :868
读取第934次
读取到的值为 :869
读取第935次
读取到的值为 :870
读取第936次
读取到的值为 :871
读取第937次
读取到的值为 :872
读取第938次
读取到的值为 :873
读取第939次
读取到的值为 :874
读取第940次
读取到的值为 :875
读取第941次
读取到的值为 :876
读取第942次
读取到的值为 :877
读取第943次
读取到的值为 :878
读取第944次
读取到的值为 :879
读取第945次
读取到的值为 :880
读取第946次
读取到的值为 :881
读取第947次
读取到的值为 :882
读取第948次
读取到的值为 :883
读取第949次
读取到的值为 :884
读取第950次
读取到的值为 :885
读取第951次
读取到的值为 :886
读取第952次
读取到的值为 :887
读取第953次
读取到的值为 :888
读取第954次
读取到的值为 :889
读取第955次
读取到的值为 :890
读取第956次
读取到的值为 :891
读取第957次
读取到的值为 :892
读取第958次
读取到的值为 :893
读取第959次
读取到的值为 :894
读取第960次
读取到的值为 :895
读取第961次
读取到的值为 :896
读取第962次
读取到的值为 :897
读取第963次
读取到的值为 :898
读取第964次
读取到的值为 :899
读取第965次
读取到的值为 :900
读取第966次
读取到的值为 :901
读取第967次
读取到的值为 :902
读取第968次
读取到的值为 :903
读取第969次
读取到的值为 :904
读取第970次
读取到的值为 :905
读取第971次
读取到的值为 :906
读取第972次
读取到的值为 :907
读取第973次
读取到的值为 :908
读取第974次
读取到的值为 :909
读取第975次
读取到的值为 :910
读取第976次
读取到的值为 :911
读取第977次
读取到的值为 :912
读取第978次
读取到的值为 :913
读取第979次
读取到的值为 :914
读取第980次
读取到的值为 :915
读取第981次
读取到的值为 :916
读取第982次
读取到的值为 :917
读取第983次
读取到的值为 :918
读取第984次
读取到的值为 :919
读取第985次
读取到的值为 :920
读取第986次
读取到的值为 :921
读取第987次
读取到的值为 :922
读取第988次
读取到的值为 :923
读取第989次
读取到的值为 :924
读取第990次
读取到的值为 :925
读取第991次
读取到的值为 :926
读取第992次
读取到的值为 :927
读取第993次
读取到的值为 :928
读取第994次
读取到的值为 :929
读取第995次
读取到的值为 :930
读取第996次
读取到的值为 :931
读取第997次
读取到的值为 :932
读取第998次
读取到的值为 :933
读取第999次
end


缺陷原因:

我们看到由于当读线程 得到CPU 后,很多时候mylist中是没有数据的,那么这次就白白的获得了资源,那么有什么有一种机制去解决这种问题呢?condition_variable就是为了这种问题而来的。

二  condition_variable 

是个类,需要和一个互斥量结合使用。

更具体的说:是要和 unique_lock使用,参考 wait()方法需要的参数

54 C++ 多线程 条件变量 condition_variable,wait(),notify_one()_第1张图片

三 使用举例以及函数详解都在代码注释中

class Teacher175 {
private:
	mutex mymutex;
	list mylist;
	condition_variable mycon;

public:

	void writefunc() {
		
		for (size_t i = 0; i < 100; i++)
		{
			//std::chrono::milliseconds readdura(20);
			//this_thread::sleep_for(readdura);
			cout << "writefuncj" << endl;
			//for (int j = 0; j < 50; j ++ ) {
			//	cout << "writefuncj = " << j <<  endl;
			//}


			//3.锁住
			unique_lock sbguard(mymutex);
			mylist.push_back(i);
			cout << "writefuncalready locked 写入数据为: i= " << i << endl;


			//4.当notify_one()方法调用的时候,会去通知mycon.wait()等待的线程,
			//但是注意,这时候mutex还没有释放,理论上应该在调用 mycon.notify_one()后,马上释放mutex。
			//那么释放mutex后,调用了mycon.wait()的线程会马上获得CPU 吗?实验测试,不一定。
			//也就是说:即使
			mycon.notify_one();
			cout << "aaa" << endl;
		}
	}

	void readfunc() {
		
		for (size_t i = 0; i < 100; i++)
		{
			cout << "readfunc" << endl;
			//1.锁住
			unique_lock sbguard(mymutex); 
			cout << "readfuncalready locked" << endl;
			//2.wait函数的意思是:判断后面的lambda表达式的返回值。
			//如果lambda返回值是 false,则会阻塞到这里,并将mymutex的锁子释放。
			//阻塞到什么时候呢?直到有人调用notify_one()方法。
			
			//3. 当其他线程调用了notify_one()后,也释放了锁子后。CPU这时候并不一定马上把线程切换给readthread。实验证明,当我们在writefunc中循环50次的打印writej的时候,当调用了writefunc的notify_one,writefunc还是很大几率拿到CPU,然后打印20多次writej后,readfunc的wait()才会得到CPU。
			//wait()会不断地尝试获取互斥量锁,注意这里,前提是CPU 又分配给了readthread,
			//如果获取了互斥量锁子,则判断条件是否成立,如果lambda返回的true,则流程走完,
			//如果lambda返回的false,那么流程还是会卡在wait()方法这里,并且释放mutex,等着下一次notify_one()。
			//4. wait函数只有一个参数的情况。只有一个参数的写法 mycon.wait(sbguard), 等同于mycon.wait(sbguard,false)
			//4.1 也就说是,wait()只有一个参数的时候,一定会阻塞在这里,释放mutex。等待nofity_one的调用后,readthread又得到CPU后:往下执行,这时候默认lamda的返回值是true了。
			//4.2 一般case下,建议要使用带两个参数的wait方法,
				//这是因为,在多个读线程都在wait的情况下,当写入一次数据后,
				//如果调用了两个nofity_one,那么两个readthread的wait这里都会去抢MUTEX,
				//假设一前一后抢到了,那么实际上mylist中只有一个数据,那么第二个抢到mutex的,
				//会有机会再次判断lambda表达式,继续等待下一次notify-one,。
				//如果wait()只有一个参数,得到notify_one后,就默认是true了,
				//流程往下走,按照目前代码的流程就会从一个empty的list中拿数据,问题就会发生
			//4.3 当有多个read线程在wait()的时候,,只写入了一个数据后,nofity_all,也会发生上述的行为。上述bug和这块的bug,也叫做虚假唤醒。
			
			//5. notify_one只能唤醒一个 wait的线程,notify_all能唤醒全部。

			//6. 线程代码,这块要深入思考。确定没有问题再用。
			//7. 这里还有一个问题,暂时没有想到如何验证。
			//7.1 如果我们有多个read线程,多个write线程。read线程的作用是连接另一个服务器(假设这个过程要花费的时间比较多)。
			//那么有没有这样的一种可能,就是当write线程notify_one()8次,但是由于read线程第一次收到后,wait判断lambda表达式为true,流程往下走,但是花费时间很多,这时候,2,3,4,5,6,7,8次的notify_one都来了,会丢失吗?重复的怎么办?

			//8.注意,在代码中 注释的代码,都是自己在验证各种case下的 流程,
			//9.注意2,在运行这段代码的时候,线程每次的运行代码都不一样,这是很正常的,
			//10.注意3:线程的运行和电脑的配置也有关系,因此有情况下,可以想办法将电脑调节成 省电模式,
			//11.总之:线程这块坑多,问题多,写业务代码时一定要清楚每一行代码是干啥的。最好是将业务逻辑和 每个知识点 结合的时候写一个小的demo,log加够,在各种情况下运行测试。不然出了问题不好分析
			mycon.wait(sbguard, [this]() {
				if (!this->mylist.empty()) {
					cout << "789true" << endl;
					return true;
				}
				else {
					cout << "123false" << endl;
					return false;
				}
			});
			if (!mylist.empty()) {
				cout << "读取到的值为 :" << mylist.front() << endl;
				mylist.pop_front();
			}
			//std::chrono::milliseconds readdura(50000);
			//this_thread::sleep_for(readdura);
			cout << "读取第" << i << "次" << endl;
		}
	}
};


void main() {
	Teacher175 tea;
	thread readthread(&Teacher175::readfunc, &tea);
	thread writethread(&Teacher175::writefunc, &tea);
	readthread.join();
	writethread.join();
	cout << "end" << endl;
}

你可能感兴趣的:(c++)