ofs | hex dump | ascii |
---|
0000 | 2f 2a 0a 20 2a 20 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 30 31 33 2c 20 46 6f 72 64 20 4d | /*..*.Copyright.(c).2013,.Ford.M |
0020 | 6f 74 6f 72 20 43 6f 6d 70 61 6e 79 0a 20 2a 20 41 6c 6c 20 72 69 67 68 74 73 20 72 65 73 65 72 | otor.Company..*.All.rights.reser |
0040 | 76 65 64 2e 0a 20 2a 0a 20 2a 20 52 65 64 69 73 74 72 69 62 75 74 69 6f 6e 20 61 6e 64 20 75 73 | ved...*..*.Redistribution.and.us |
0060 | 65 20 69 6e 20 73 6f 75 72 63 65 20 61 6e 64 20 62 69 6e 61 72 79 20 66 6f 72 6d 73 2c 20 77 69 | e.in.source.and.binary.forms,.wi |
0080 | 74 68 20 6f 72 20 77 69 74 68 6f 75 74 0a 20 2a 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 2c 20 61 | th.or.without..*.modification,.a |
00a0 | 72 65 20 70 65 72 6d 69 74 74 65 64 20 70 72 6f 76 69 64 65 64 20 74 68 61 74 20 74 68 65 20 66 | re.permitted.provided.that.the.f |
00c0 | 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61 72 65 20 6d 65 74 3a 0a 20 2a 0a | ollowing.conditions.are.met:..*. |
00e0 | 20 2a 20 52 65 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 6f 66 20 73 6f 75 72 63 65 20 63 6f 64 | .*.Redistributions.of.source.cod |
0100 | 65 20 6d 75 73 74 20 72 65 74 61 69 6e 20 74 68 65 20 61 62 6f 76 65 20 63 6f 70 79 72 69 67 68 | e.must.retain.the.above.copyrigh |
0120 | 74 20 6e 6f 74 69 63 65 2c 20 74 68 69 73 0a 20 2a 20 6c 69 73 74 20 6f 66 20 63 6f 6e 64 69 74 | t.notice,.this..*.list.of.condit |
0140 | 69 6f 6e 73 20 61 6e 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69 73 63 6c 61 69 6d 65 | ions.and.the.following.disclaime |
0160 | 72 2e 0a 20 2a 0a 20 2a 20 52 65 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 69 6e 20 62 69 6e 61 | r...*..*.Redistributions.in.bina |
0180 | 72 79 20 66 6f 72 6d 20 6d 75 73 74 20 72 65 70 72 6f 64 75 63 65 20 74 68 65 20 61 62 6f 76 65 | ry.form.must.reproduce.the.above |
01a0 | 20 63 6f 70 79 72 69 67 68 74 20 6e 6f 74 69 63 65 2c 0a 20 2a 20 74 68 69 73 20 6c 69 73 74 20 | .copyright.notice,..*.this.list. |
01c0 | 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61 6e 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a | of.conditions.and.the.following. |
01e0 | 20 2a 20 64 69 73 63 6c 61 69 6d 65 72 20 69 6e 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 | .*.disclaimer.in.the.documentati |
0200 | 6f 6e 20 61 6e 64 2f 6f 72 20 6f 74 68 65 72 20 6d 61 74 65 72 69 61 6c 73 20 70 72 6f 76 69 64 | on.and/or.other.materials.provid |
0220 | 65 64 20 77 69 74 68 20 74 68 65 0a 20 2a 20 64 69 73 74 72 69 62 75 74 69 6f 6e 2e 0a 20 2a 0a | ed.with.the..*.distribution...*. |
0240 | 20 2a 20 4e 65 69 74 68 65 72 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 46 6f 72 64 20 | .*.Neither.the.name.of.the.Ford. |
0260 | 4d 6f 74 6f 72 20 43 6f 6d 70 61 6e 79 20 6e 6f 72 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 69 | Motor.Company.nor.the.names.of.i |
0280 | 74 73 20 63 6f 6e 74 72 69 62 75 74 6f 72 73 0a 20 2a 20 6d 61 79 20 62 65 20 75 73 65 64 20 74 | ts.contributors..*.may.be.used.t |
02a0 | 6f 20 65 6e 64 6f 72 73 65 20 6f 72 20 70 72 6f 6d 6f 74 65 20 70 72 6f 64 75 63 74 73 20 64 65 | o.endorse.or.promote.products.de |
02c0 | 72 69 76 65 64 20 66 72 6f 6d 20 74 68 69 73 20 73 6f 66 74 77 61 72 65 0a 20 2a 20 77 69 74 68 | rived.from.this.software..*.with |
02e0 | 6f 75 74 20 73 70 65 63 69 66 69 63 20 70 72 69 6f 72 20 77 72 69 74 74 65 6e 20 70 65 72 6d 69 | out.specific.prior.written.permi |
0300 | 73 73 69 6f 6e 2e 0a 20 2a 0a 20 2a 20 54 48 49 53 20 53 4f 46 54 57 41 52 45 20 49 53 20 50 52 | ssion...*..*.THIS.SOFTWARE.IS.PR |
0320 | 4f 56 49 44 45 44 20 42 59 20 54 48 45 20 43 4f 50 59 52 49 47 48 54 20 48 4f 4c 44 45 52 53 20 | OVIDED.BY.THE.COPYRIGHT.HOLDERS. |
0340 | 41 4e 44 20 43 4f 4e 54 52 49 42 55 54 4f 52 53 20 22 41 53 20 49 53 22 0a 20 2a 20 41 4e 44 20 | AND.CONTRIBUTORS."AS.IS"..*.AND. |
0360 | 41 4e 59 20 45 58 50 52 45 53 53 20 4f 52 20 49 4d 50 4c 49 45 44 20 57 41 52 52 41 4e 54 49 45 | ANY.EXPRESS.OR.IMPLIED.WARRANTIE |
0380 | 53 2c 20 49 4e 43 4c 55 44 49 4e 47 2c 20 42 55 54 20 4e 4f 54 20 4c 49 4d 49 54 45 44 20 54 4f | S,.INCLUDING,.BUT.NOT.LIMITED.TO |
03a0 | 2c 20 54 48 45 0a 20 2a 20 49 4d 50 4c 49 45 44 20 57 41 52 52 41 4e 54 49 45 53 20 4f 46 20 4d | ,.THE..*.IMPLIED.WARRANTIES.OF.M |
03c0 | 45 52 43 48 41 4e 54 41 42 49 4c 49 54 59 20 41 4e 44 20 46 49 54 4e 45 53 53 20 46 4f 52 20 41 | ERCHANTABILITY.AND.FITNESS.FOR.A |
03e0 | 20 50 41 52 54 49 43 55 4c 41 52 20 50 55 52 50 4f 53 45 0a 20 2a 20 41 52 45 20 44 49 53 43 4c | .PARTICULAR.PURPOSE..*.ARE.DISCL |
0400 | 41 49 4d 45 44 2e 20 49 4e 20 4e 4f 20 45 56 45 4e 54 20 53 48 41 4c 4c 20 54 48 45 20 43 4f 50 | AIMED..IN.NO.EVENT.SHALL.THE.COP |
0420 | 59 52 49 47 48 54 20 48 4f 4c 44 45 52 20 4f 52 20 43 4f 4e 54 52 49 42 55 54 4f 52 53 20 42 45 | YRIGHT.HOLDER.OR.CONTRIBUTORS.BE |
0440 | 0a 20 2a 20 4c 49 41 42 4c 45 20 46 4f 52 20 41 4e 59 20 44 49 52 45 43 54 2c 20 49 4e 44 49 52 | ..*.LIABLE.FOR.ANY.DIRECT,.INDIR |
0460 | 45 43 54 2c 20 49 4e 43 49 44 45 4e 54 41 4c 2c 20 53 50 45 43 49 41 4c 2c 20 45 58 45 4d 50 4c | ECT,.INCIDENTAL,.SPECIAL,.EXEMPL |
0480 | 41 52 59 2c 20 4f 52 0a 20 2a 20 43 4f 4e 53 45 51 55 45 4e 54 49 41 4c 20 44 41 4d 41 47 45 53 | ARY,.OR..*.CONSEQUENTIAL.DAMAGES |
04a0 | 20 28 49 4e 43 4c 55 44 49 4e 47 2c 20 42 55 54 20 4e 4f 54 20 4c 49 4d 49 54 45 44 20 54 4f 2c | .(INCLUDING,.BUT.NOT.LIMITED.TO, |
04c0 | 20 50 52 4f 43 55 52 45 4d 45 4e 54 20 4f 46 0a 20 2a 20 53 55 42 53 54 49 54 55 54 45 20 47 4f | .PROCUREMENT.OF..*.SUBSTITUTE.GO |
04e0 | 4f 44 53 20 4f 52 20 53 45 52 56 49 43 45 53 3b 20 4c 4f 53 53 20 4f 46 20 55 53 45 2c 20 44 41 | ODS.OR.SERVICES;.LOSS.OF.USE,.DA |
0500 | 54 41 2c 20 4f 52 20 50 52 4f 46 49 54 53 3b 20 4f 52 20 42 55 53 49 4e 45 53 53 0a 20 2a 20 49 | TA,.OR.PROFITS;.OR.BUSINESS..*.I |
0520 | 4e 54 45 52 52 55 50 54 49 4f 4e 29 20 48 4f 57 45 56 45 52 20 43 41 55 53 45 44 20 41 4e 44 20 | NTERRUPTION).HOWEVER.CAUSED.AND. |
0540 | 4f 4e 20 41 4e 59 20 54 48 45 4f 52 59 20 4f 46 20 4c 49 41 42 49 4c 49 54 59 2c 20 57 48 45 54 | ON.ANY.THEORY.OF.LIABILITY,.WHET |
0560 | 48 45 52 20 49 4e 0a 20 2a 20 43 4f 4e 54 52 41 43 54 2c 20 53 54 52 49 43 54 20 4c 49 41 42 49 | HER.IN..*.CONTRACT,.STRICT.LIABI |
0580 | 4c 49 54 59 2c 20 4f 52 20 54 4f 52 54 20 28 49 4e 43 4c 55 44 49 4e 47 20 4e 45 47 4c 49 47 45 | LITY,.OR.TORT.(INCLUDING.NEGLIGE |
05a0 | 4e 43 45 20 4f 52 20 4f 54 48 45 52 57 49 53 45 29 0a 20 2a 20 41 52 49 53 49 4e 47 20 49 4e 20 | NCE.OR.OTHERWISE)..*.ARISING.IN. |
05c0 | 41 4e 59 20 57 41 59 20 4f 55 54 20 4f 46 20 54 48 45 20 55 53 45 20 4f 46 20 54 48 49 53 20 53 | ANY.WAY.OUT.OF.THE.USE.OF.THIS.S |
05e0 | 4f 46 54 57 41 52 45 2c 20 45 56 45 4e 20 49 46 20 41 44 56 49 53 45 44 20 4f 46 20 54 48 45 0a | OFTWARE,.EVEN.IF.ADVISED.OF.THE. |
0600 | 20 2a 20 50 4f 53 53 49 42 49 4c 49 54 59 20 4f 46 20 53 55 43 48 20 44 41 4d 41 47 45 2e 0a 20 | .*.POSSIBILITY.OF.SUCH.DAMAGE... |
0620 | 2a 2f 0a 23 69 66 6e 64 65 66 20 53 52 43 5f 43 4f 4d 50 4f 4e 45 4e 54 53 5f 49 4e 43 4c 55 44 | */.#ifndef.SRC_COMPONENTS_INCLUD |
0640 | 45 5f 55 54 49 4c 53 5f 4c 4f 43 4b 5f 48 5f 0a 23 64 65 66 69 6e 65 20 53 52 43 5f 43 4f 4d 50 | E_UTILS_LOCK_H_.#define.SRC_COMP |
0660 | 4f 4e 45 4e 54 53 5f 49 4e 43 4c 55 44 45 5f 55 54 49 4c 53 5f 4c 4f 43 4b 5f 48 5f 0a 0a 23 69 | ONENTS_INCLUDE_UTILS_LOCK_H_..#i |
0680 | 66 20 64 65 66 69 6e 65 64 28 4f 53 5f 50 4f 53 49 58 29 0a 23 69 6e 63 6c 75 64 65 20 3c 70 74 | f.defined(OS_POSIX).#include.<pt |
06a0 | 68 72 65 61 64 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 63 68 65 64 2e 68 3e 0a 23 65 6c 73 | hread.h>.#include.<sched.h>.#els |
06c0 | 65 0a 23 65 72 72 6f 72 20 50 6c 65 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 20 6c 6f 63 6b 20 66 | e.#error.Please.implement.lock.f |
06e0 | 6f 72 20 79 6f 75 72 20 4f 53 0a 23 65 6e 64 69 66 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 | or.your.OS.#endif.#include.<stdi |
0700 | 6e 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 6d 65 6d 6f 72 79 3e 0a 23 69 6e 63 6c 75 64 65 | nt.h>.#include.<memory>.#include |
0720 | 20 22 75 74 69 6c 73 2f 61 74 6f 6d 69 63 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 75 74 69 6c | ."utils/atomic.h".#include."util |
0740 | 73 2f 6d 61 63 72 6f 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 75 74 69 6c 73 2f 6d 65 6d 6f 72 | s/macro.h".#include."utils/memor |
0760 | 79 5f 62 61 72 72 69 65 72 2e 68 22 0a 0a 6e 61 6d 65 73 70 61 63 65 20 73 79 6e 63 5f 70 72 69 | y_barrier.h"..namespace.sync_pri |
0780 | 6d 69 74 69 76 65 73 20 7b 0a 0a 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6c 20 7b 0a 23 69 66 20 | mitives.{..namespace.impl.{.#if. |
07a0 | 64 65 66 69 6e 65 64 28 4f 53 5f 50 4f 53 49 58 29 0a 74 79 70 65 64 65 66 20 70 74 68 72 65 61 | defined(OS_POSIX).typedef.pthrea |
07c0 | 64 5f 6d 75 74 65 78 5f 74 20 50 6c 61 74 66 6f 72 6d 4d 75 74 65 78 3b 0a 23 65 6e 64 69 66 0a | d_mutex_t.PlatformMutex;.#endif. |
07e0 | 7d 20 20 2f 2f 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6c 0a 0a 63 6c 61 73 73 20 53 70 69 6e | }..//.namespace.impl..class.Spin |
0800 | 4d 75 74 65 78 20 7b 0a 20 70 75 62 6c 69 63 3a 0a 20 20 53 70 69 6e 4d 75 74 65 78 28 29 20 3a | Mutex.{..public:...SpinMutex().: |
0820 | 20 73 74 61 74 65 5f 28 30 29 20 7b 7d 0a 20 20 76 6f 69 64 20 4c 6f 63 6b 28 29 20 7b 0a 20 20 | .state_(0).{}...void.Lock().{... |
0840 | 20 20 2f 2f 20 43 6f 6d 6d 65 6e 74 20 62 65 6c 6f 77 20 61 64 64 20 65 78 63 65 70 74 69 6f 6e | ..//.Comment.below.add.exception |
0860 | 20 66 6f 72 20 6c 69 6e 74 20 65 72 72 6f 72 0a 20 20 20 20 2f 2f 20 52 65 61 73 6f 6e 3a 20 46 | .for.lint.error.....//.Reason:.F |
0880 | 6c 65 78 65 4c 69 6e 74 20 64 6f 65 73 6e 27 74 20 6b 6e 6f 77 20 61 62 6f 75 74 20 63 6f 6d 70 | lexeLint.doesn't.know.about.comp |
08a0 | 69 6c 65 72 27 73 20 62 75 69 6c 74 2d 69 6e 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 0a 20 20 20 | iler's.built-in.instructions.... |
08c0 | 20 2f 2a 6c 69 6e 74 20 2d 65 31 30 35 35 2a 2f 0a 20 20 20 20 69 66 20 28 61 74 6f 6d 69 63 5f | ./*lint.-e1055*/.....if.(atomic_ |
08e0 | 70 6f 73 74 5f 73 65 74 28 26 73 74 61 74 65 5f 29 20 3d 3d 20 30 29 20 7b 0a 20 20 20 20 20 20 | post_set(&state_).==.0).{....... |
0900 | 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 20 28 3b 3b 29 20 7b 0a 20 20 20 | return;.....}.....for.(;;).{.... |
0920 | 20 20 20 73 63 68 65 64 5f 79 69 65 6c 64 28 29 3b 0a 20 20 20 20 20 20 2f 2a 6c 69 6e 74 20 2d | ...sched_yield();......./*lint.- |
0940 | 65 31 30 35 35 2a 2f 0a 20 20 20 20 20 20 69 66 20 28 73 74 61 74 65 5f 20 3d 3d 20 30 20 26 26 | e1055*/.......if.(state_.==.0.&& |
0960 | 20 61 74 6f 6d 69 63 5f 70 6f 73 74 5f 73 65 74 28 26 73 74 61 74 65 5f 29 20 3d 3d 20 30 29 20 | .atomic_post_set(&state_).==.0). |
0980 | 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a | {.........return;.......}.....}. |
09a0 | 20 20 7d 0a 20 20 76 6f 69 64 20 55 6e 6c 6f 63 6b 28 29 20 7b 0a 20 20 20 20 73 74 61 74 65 5f | ..}...void.Unlock().{.....state_ |
09c0 | 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 7e 53 70 69 6e 4d 75 74 65 78 28 29 20 7b 7d 0a 0a 20 70 72 | .=.0;...}...~SpinMutex().{}...pr |
09e0 | 69 76 61 74 65 3a 0a 20 20 76 6f 6c 61 74 69 6c 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 73 | ivate:...volatile.unsigned.int.s |
0a00 | 74 61 74 65 5f 3b 0a 7d 3b 0a 0a 2f 2a 20 50 6c 61 74 66 6f 72 6d 2d 69 6e 64 65 70 65 6e 65 64 | tate_;.};../*.Platform-indepened |
0a20 | 6e 74 20 4e 4f 4e 2d 52 45 43 55 52 53 49 56 45 20 6c 6f 63 6b 20 28 6d 75 74 65 78 29 20 77 72 | nt.NON-RECURSIVE.lock.(mutex).wr |
0a40 | 61 70 70 65 72 0a 20 20 20 50 6c 65 61 73 65 20 75 73 65 20 41 75 74 6f 4c 6f 63 6b 20 74 6f 20 | apper....Please.use.AutoLock.to. |
0a60 | 61 63 6b 71 75 69 72 65 20 61 6e 64 20 28 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 29 20 72 65 6c | ackquire.and.(automatically).rel |
0a80 | 65 61 73 65 20 69 74 0a 20 20 20 49 74 20 65 61 73 65 73 20 62 61 6c 61 6e 63 69 6e 67 20 6f 66 | ease.it....It.eases.balancing.of |
0aa0 | 20 6d 75 6c 74 70 6c 65 20 6c 6f 63 6b 20 74 61 6b 69 6e 67 2f 72 65 6c 65 61 73 69 6e 67 20 61 | .multple.lock.taking/releasing.a |
0ac0 | 6e 64 20 6d 61 6b 65 73 20 69 74 0a 20 20 20 49 6d 70 6f 73 73 69 62 6c 65 20 74 6f 20 66 6f 72 | nd.makes.it....Impossible.to.for |
0ae0 | 67 65 74 20 74 6f 20 72 65 6c 65 61 73 65 20 74 68 65 20 6c 6f 63 6b 3a 0a 20 20 20 2e 2e 2e 0a | get.to.release.the.lock:........ |
0b00 | 20 20 20 43 6f 6e 63 75 72 65 6e 74 6c 79 41 63 63 65 73 73 65 64 44 61 74 61 20 64 61 74 61 5f | ...ConcurentlyAccessedData.data_ |
0b20 | 3b 0a 20 20 20 73 79 6e 63 5f 70 72 69 6d 69 74 69 76 65 73 3a 3a 4c 6f 63 6b 20 64 61 74 61 5f | ;....sync_primitives::Lock.data_ |
0b40 | 6c 6f 63 6b 5f 3b 0a 20 20 20 2e 2e 2e 0a 20 20 20 7b 0a 20 20 20 20 20 73 79 6e 63 5f 70 72 69 | lock_;...........{......sync_pri |
0b60 | 6d 69 74 69 76 65 73 3a 3a 41 75 74 6f 4c 6f 63 6b 20 61 75 74 6f 5f 6c 6f 63 6b 28 64 61 74 61 | mitives::AutoLock.auto_lock(data |
0b80 | 5f 6c 6f 63 6b 5f 29 3b 0a 20 20 20 20 20 64 61 74 61 5f 2e 52 65 61 64 4f 72 57 72 69 74 65 44 | _lock_);......data_.ReadOrWriteD |
0ba0 | 61 74 61 28 29 3b 0a 20 20 20 7d 20 2f 2f 20 6c 6f 63 6b 20 69 73 20 61 75 74 6f 6d 61 74 69 63 | ata();....}.//.lock.is.automatic |
0bc0 | 61 6c 6c 79 20 72 65 6c 65 61 73 65 64 20 68 65 72 65 0a 2a 2f 0a 63 6c 61 73 73 20 4c 6f 63 6b | ally.released.here.*/.class.Lock |
0be0 | 20 7b 0a 20 70 75 62 6c 69 63 3a 0a 20 20 4c 6f 63 6b 28 29 3b 0a 20 20 4c 6f 63 6b 28 62 6f 6f | .{..public:...Lock();...Lock(boo |
0c00 | 6c 20 69 73 5f 72 65 63 75 72 73 69 76 65 29 3b 0a 20 20 7e 4c 6f 63 6b 28 29 3b 0a 0a 20 20 2f | l.is_recursive);...~Lock();..../ |
0c20 | 2f 20 41 63 6b 71 75 69 72 65 20 74 68 65 20 6c 6f 63 6b 2e 20 4d 75 73 74 20 62 65 20 63 61 6c | /.Ackquire.the.lock..Must.be.cal |
0c40 | 6c 65 64 20 6f 6e 6c 79 20 6f 6e 63 65 20 6f 6e 20 61 20 74 68 72 65 61 64 2e 0a 20 20 2f 2f 20 | led.only.once.on.a.thread....//. |
0c60 | 50 6c 65 61 73 65 20 63 6f 6e 73 69 64 65 72 20 75 73 69 6e 67 20 41 75 74 6f 4c 6f 63 6b 20 74 | Please.consider.using.AutoLock.t |
0c80 | 6f 20 63 61 70 74 75 72 65 20 69 74 2e 0a 20 20 76 6f 69 64 20 41 63 71 75 69 72 65 28 29 3b 0a | o.capture.it....void.Acquire();. |
0ca0 | 20 20 2f 2f 20 52 65 6c 65 61 73 65 20 74 68 65 20 6c 6f 63 6b 2e 20 4d 75 73 74 20 62 65 20 63 | ..//.Release.the.lock..Must.be.c |
0cc0 | 61 6c 6c 65 64 20 6f 6e 6c 79 20 6f 6e 63 65 20 6f 6e 20 61 20 74 68 72 65 61 64 20 61 66 74 65 | alled.only.once.on.a.thread.afte |
0ce0 | 72 20 6c 6f 63 6b 2e 0a 20 20 2f 2f 20 77 61 73 20 61 63 71 75 69 72 65 64 2e 20 50 6c 65 61 73 | r.lock....//.was.acquired..Pleas |
0d00 | 65 20 63 6f 6e 73 69 64 65 72 20 75 73 69 6e 67 20 41 75 74 6f 4c 6f 63 6b 20 74 6f 20 61 75 74 | e.consider.using.AutoLock.to.aut |
0d20 | 6f 6d 61 74 69 63 61 6c 6c 79 20 72 65 6c 65 61 73 65 0a 20 20 2f 2f 20 74 68 65 20 6c 6f 63 6b | omatically.release...//.the.lock |
0d40 | 0a 20 20 76 6f 69 64 20 52 65 6c 65 61 73 65 28 29 3b 0a 20 20 2f 2f 20 54 72 79 20 69 66 20 6c | ...void.Release();...//.Try.if.l |
0d60 | 6f 63 6b 20 63 61 6e 20 62 65 20 63 61 70 74 75 72 65 64 20 61 6e 64 20 6c 6f 63 6b 20 69 74 20 | ock.can.be.captured.and.lock.it. |
0d80 | 69 66 20 69 74 20 77 61 73 20 70 6f 73 73 69 62 6c 65 2e 0a 20 20 2f 2f 20 49 66 20 69 74 20 63 | if.it.was.possible....//.If.it.c |
0da0 | 61 70 74 75 72 65 64 2c 20 6c 6f 63 6b 20 6d 75 73 74 20 62 65 20 6d 61 6e 75 61 6c 6c 79 20 72 | aptured,.lock.must.be.manually.r |
0dc0 | 65 6c 65 61 73 65 64 20 63 61 6c 6c 69 6e 67 20 74 6f 20 52 65 6c 65 61 73 65 0a 20 20 2f 2f 20 | eleased.calling.to.Release...//. |
0de0 | 77 68 65 6e 20 70 72 6f 74 65 63 74 65 64 20 72 65 73 6f 75 72 63 65 20 61 63 63 65 73 73 20 77 | when.protected.resource.access.w |
0e00 | 61 73 20 66 69 6e 69 73 68 65 64 2e 0a 20 20 2f 2f 20 40 72 65 74 75 72 6e 73 20 77 65 74 68 65 | as.finished....//.@returns.wethe |
0e20 | 72 20 6c 6f 63 6b 20 77 61 73 20 63 61 70 74 75 72 65 64 2e 0a 20 20 62 6f 6f 6c 20 54 72 79 28 | r.lock.was.captured....bool.Try( |
0e40 | 29 3b 0a 0a 20 70 72 69 76 61 74 65 3a 0a 20 20 69 6d 70 6c 3a 3a 50 6c 61 74 66 6f 72 6d 4d 75 | );...private:...impl::PlatformMu |
0e60 | 74 65 78 20 6d 75 74 65 78 5f 3b 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 2f 2a | tex.mutex_;..#ifndef.NDEBUG.../* |
0e80 | 2a 0a 20 20 20 2a 20 40 62 72 69 65 66 20 42 61 73 69 63 20 64 65 62 75 67 67 69 6e 67 20 61 69 | *....*.@brief.Basic.debugging.ai |
0ea0 | 64 2c 20 61 20 66 6c 61 67 20 74 68 61 74 20 73 69 67 6e 61 6c 73 20 77 65 74 68 65 72 20 74 68 | d,.a.flag.that.signals.wether.th |
0ec0 | 69 73 20 6c 6f 63 6b 20 69 73 0a 20 20 20 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 61 6b 65 6e 0a | is.lock.is....*.currently.taken. |
0ee0 | 20 20 20 2a 20 41 6c 6c 6f 77 73 20 64 65 74 65 63 74 69 6f 6e 20 6f 66 20 61 62 61 6e 64 6f 6e | ...*.Allows.detection.of.abandon |
0f00 | 65 64 20 61 6e 64 20 72 65 63 75 72 73 69 76 65 6c 79 20 63 61 70 74 75 72 65 64 20 6d 75 74 65 | ed.and.recursively.captured.mute |
0f20 | 78 65 73 0a 20 20 20 2a 2f 0a 20 20 75 69 6e 74 33 32 5f 74 20 6c 6f 63 6b 5f 74 61 6b 65 6e 5f | xes....*/...uint32_t.lock_taken_ |
0f40 | 3b 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 40 62 72 69 65 66 20 44 65 73 63 72 69 62 65 20 69 66 | ;..../**....*.@brief.Describe.if |
0f60 | 20 6d 75 74 65 78 20 69 73 20 72 65 63 75 72 63 69 76 65 20 6f 72 20 6e 6f 74 0a 20 20 20 2a 2f | .mutex.is.recurcive.or.not....*/ |
0f80 | 0a 20 20 62 6f 6f 6c 20 69 73 5f 6d 75 74 65 78 5f 72 65 63 75 72 73 69 76 65 5f 3b 0a 0a 20 20 | ...bool.is_mutex_recursive_;.... |
0fa0 | 76 6f 69 64 20 41 73 73 65 72 74 46 72 65 65 41 6e 64 4d 61 72 6b 54 61 6b 65 6e 28 29 3b 0a 20 | void.AssertFreeAndMarkTaken();.. |
0fc0 | 20 76 6f 69 64 20 41 73 73 65 72 74 54 61 6b 65 6e 41 6e 64 4d 61 72 6b 46 72 65 65 28 29 3b 0a | .void.AssertTakenAndMarkFree();. |
0fe0 | 23 65 6c 73 65 0a 20 20 76 6f 69 64 20 41 73 73 65 72 74 46 72 65 65 41 6e 64 4d 61 72 6b 54 61 | #else...void.AssertFreeAndMarkTa |
1000 | 6b 65 6e 28 29 20 7b 7d 0a 20 20 76 6f 69 64 20 41 73 73 65 72 74 54 61 6b 65 6e 41 6e 64 4d 61 | ken().{}...void.AssertTakenAndMa |
1020 | 72 6b 46 72 65 65 28 29 20 7b 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 76 6f 69 64 20 49 6e 69 74 28 | rkFree().{}.#endif....void.Init( |
1040 | 62 6f 6f 6c 20 69 73 5f 72 65 63 75 72 73 69 76 65 29 3b 0a 0a 20 20 66 72 69 65 6e 64 20 63 6c | bool.is_recursive);....friend.cl |
1060 | 61 73 73 20 43 6f 6e 64 69 74 69 6f 6e 61 6c 56 61 72 69 61 62 6c 65 3b 0a 20 20 44 49 53 41 4c | ass.ConditionalVariable;...DISAL |
1080 | 4c 4f 57 5f 43 4f 50 59 5f 41 4e 44 5f 41 53 53 49 47 4e 28 4c 6f 63 6b 29 3b 0a 7d 3b 0a 0a 2f | LOW_COPY_AND_ASSIGN(Lock);.};../ |
10a0 | 2f 20 54 68 69 73 20 63 6c 61 73 73 20 69 73 20 75 73 65 64 20 74 6f 20 61 75 74 6f 6d 61 74 69 | /.This.class.is.used.to.automati |
10c0 | 63 61 6c 6c 79 20 61 63 71 75 69 72 65 20 61 6e 64 20 72 65 6c 65 61 73 65 20 74 68 65 20 61 20 | cally.acquire.and.release.the.a. |
10e0 | 6c 6f 63 6b 0a 63 6c 61 73 73 20 41 75 74 6f 4c 6f 63 6b 20 7b 0a 20 70 75 62 6c 69 63 3a 0a 20 | lock.class.AutoLock.{..public:.. |
1100 | 20 65 78 70 6c 69 63 69 74 20 41 75 74 6f 4c 6f 63 6b 28 4c 6f 63 6b 26 20 6c 6f 63 6b 29 20 3a | .explicit.AutoLock(Lock&.lock).: |
1120 | 20 6c 6f 63 6b 5f 28 6c 6f 63 6b 29 20 7b 0a 20 20 20 20 6c 6f 63 6b 5f 2e 41 63 71 75 69 72 65 | .lock_(lock).{.....lock_.Acquire |
1140 | 28 29 3b 0a 20 20 7d 0a 20 20 2f 2f 20 41 75 74 6f 6c 6f 63 6b 20 61 20 73 68 61 72 65 64 20 70 | ();...}...//.Autolock.a.shared.p |
1160 | 6f 69 6e 74 65 72 20 74 6f 20 61 20 6c 6f 63 6b 2c 20 61 73 73 75 6d 65 73 20 74 68 65 20 6c 6f | ointer.to.a.lock,.assumes.the.lo |
1180 | 63 6b 20 64 6f 65 73 6e 27 74 20 67 65 74 0a 20 20 2f 2f 20 64 65 73 74 72 75 63 74 65 64 20 28 | ck.doesn't.get...//.destructed.( |
11a0 | 61 73 20 64 6f 65 73 20 6f 74 68 65 72 20 63 6f 6e 73 74 72 75 63 74 6f 72 29 0a 20 20 65 78 70 | as.does.other.constructor)...exp |
11c0 | 6c 69 63 69 74 20 41 75 74 6f 4c 6f 63 6b 28 63 6f 6e 73 74 20 73 74 64 3a 3a 73 68 61 72 65 64 | licit.AutoLock(const.std::shared |
11e0 | 5f 70 74 72 3c 4c 6f 63 6b 3e 26 20 6c 6f 63 6b 29 20 3a 20 6c 6f 63 6b 5f 28 2a 6c 6f 63 6b 29 | _ptr<Lock>&.lock).:.lock_(*lock) |
1200 | 20 7b 0a 20 20 20 20 6c 6f 63 6b 5f 2e 41 63 71 75 69 72 65 28 29 3b 0a 20 20 7d 0a 20 20 7e 41 | .{.....lock_.Acquire();...}...~A |
1220 | 75 74 6f 4c 6f 63 6b 28 29 20 7b 0a 20 20 20 20 6c 6f 63 6b 5f 2e 52 65 6c 65 61 73 65 28 29 3b | utoLock().{.....lock_.Release(); |
1240 | 0a 20 20 7d 0a 0a 20 70 72 69 76 61 74 65 3a 0a 20 20 4c 6f 63 6b 26 20 47 65 74 4c 6f 63 6b 28 | ...}...private:...Lock&.GetLock( |
1260 | 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 6c 6f 63 6b 5f 3b 0a 20 20 7d 0a 20 20 4c 6f 63 6b | ).{.....return.lock_;...}...Lock |
1280 | 26 20 6c 6f 63 6b 5f 3b 0a 0a 20 70 72 69 76 61 74 65 3a 0a 20 20 66 72 69 65 6e 64 20 63 6c 61 | &.lock_;...private:...friend.cla |
12a0 | 73 73 20 41 75 74 6f 55 6e 6c 6f 63 6b 3b 0a 20 20 66 72 69 65 6e 64 20 63 6c 61 73 73 20 43 6f | ss.AutoUnlock;...friend.class.Co |
12c0 | 6e 64 69 74 69 6f 6e 61 6c 56 61 72 69 61 62 6c 65 3b 0a 20 20 44 49 53 41 4c 4c 4f 57 5f 43 4f | nditionalVariable;...DISALLOW_CO |
12e0 | 50 59 5f 41 4e 44 5f 41 53 53 49 47 4e 28 41 75 74 6f 4c 6f 63 6b 29 3b 0a 7d 3b 0a 0a 2f 2f 20 | PY_AND_ASSIGN(AutoLock);.};..//. |
1300 | 54 68 69 73 20 63 6c 61 73 73 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 6d 70 6f 72 61 72 6c 79 | This.class.is.used.to.temporarly |
1320 | 20 75 6e 6c 6f 63 6b 20 61 75 74 6f 6c 6f 63 6b 65 64 20 6c 6f 63 6b 0a 63 6c 61 73 73 20 41 75 | .unlock.autolocked.lock.class.Au |
1340 | 74 6f 55 6e 6c 6f 63 6b 20 7b 0a 20 70 75 62 6c 69 63 3a 0a 20 20 65 78 70 6c 69 63 69 74 20 41 | toUnlock.{..public:...explicit.A |
1360 | 75 74 6f 55 6e 6c 6f 63 6b 28 4c 6f 63 6b 26 20 6c 6f 63 6b 29 20 3a 20 6c 6f 63 6b 5f 28 6c 6f | utoUnlock(Lock&.lock).:.lock_(lo |
1380 | 63 6b 29 20 7b 0a 20 20 20 20 6c 6f 63 6b 5f 2e 52 65 6c 65 61 73 65 28 29 3b 0a 20 20 7d 0a 20 | ck).{.....lock_.Release();...}.. |
13a0 | 20 65 78 70 6c 69 63 69 74 20 41 75 74 6f 55 6e 6c 6f 63 6b 28 63 6f 6e 73 74 20 73 74 64 3a 3a | .explicit.AutoUnlock(const.std:: |
13c0 | 73 68 61 72 65 64 5f 70 74 72 3c 4c 6f 63 6b 3e 26 20 6c 6f 63 6b 29 20 3a 20 6c 6f 63 6b 5f 28 | shared_ptr<Lock>&.lock).:.lock_( |
13e0 | 2a 6c 6f 63 6b 29 20 7b 0a 20 20 20 20 6c 6f 63 6b 5f 2e 52 65 6c 65 61 73 65 28 29 3b 0a 20 20 | *lock).{.....lock_.Release();... |
1400 | 7d 0a 20 20 65 78 70 6c 69 63 69 74 20 41 75 74 6f 55 6e 6c 6f 63 6b 28 41 75 74 6f 4c 6f 63 6b | }...explicit.AutoUnlock(AutoLock |
1420 | 26 20 6c 6f 63 6b 29 20 3a 20 6c 6f 63 6b 5f 28 6c 6f 63 6b 2e 47 65 74 4c 6f 63 6b 28 29 29 20 | &.lock).:.lock_(lock.GetLock()). |
1440 | 7b 0a 20 20 20 20 6c 6f 63 6b 5f 2e 52 65 6c 65 61 73 65 28 29 3b 0a 20 20 7d 0a 20 20 7e 41 75 | {.....lock_.Release();...}...~Au |
1460 | 74 6f 55 6e 6c 6f 63 6b 28 29 20 7b 0a 20 20 20 20 6c 6f 63 6b 5f 2e 41 63 71 75 69 72 65 28 29 | toUnlock().{.....lock_.Acquire() |
1480 | 3b 0a 20 20 7d 0a 0a 20 70 72 69 76 61 74 65 3a 0a 20 20 4c 6f 63 6b 26 20 6c 6f 63 6b 5f 3b 0a | ;...}...private:...Lock&.lock_;. |
14a0 | 0a 20 70 72 69 76 61 74 65 3a 0a 20 20 44 49 53 41 4c 4c 4f 57 5f 43 4f 50 59 5f 41 4e 44 5f 41 | ..private:...DISALLOW_COPY_AND_A |
14c0 | 53 53 49 47 4e 28 41 75 74 6f 55 6e 6c 6f 63 6b 29 3b 0a 7d 3b 0a 0a 7d 20 20 2f 2f 20 6e 61 6d | SSIGN(AutoUnlock);.};..}..//.nam |
14e0 | 65 73 70 61 63 65 20 73 79 6e 63 5f 70 72 69 6d 69 74 69 76 65 73 0a 23 65 6e 64 69 66 20 20 2f | espace.sync_primitives.#endif../ |
1500 | 2f 20 53 52 43 5f 43 4f 4d 50 4f 4e 45 4e 54 53 5f 49 4e 43 4c 55 44 45 5f 55 54 49 4c 53 5f 4c | /.SRC_COMPONENTS_INCLUDE_UTILS_L |
1520 | 4f 43 4b 5f 48 5f 00 00 00 0a | OCK_H_.... |