Un pic de asamblare
După ce aţi citit acest articol despre buffer gratuite de blocare şi de a vedea de utilizare a CAS (comparati si swap), m-am simtit ca postarea codul de asamblare să facă acelaşi lucru. Utilizaţi caz acolo a fost de a scrie o metodă de nativ şi să-l de la Java (înapoi la 1,5, atunci când structurile de concurente de date în Java au fost mai mult sau mai puţin inexistente). Fără alte introduceri, voi dezlănţui codul de pe tine
. Primul este pentru CAS şi al doilea este pentru GCD de calcul folosind algoritmul lui Euclid (acesta poate fi găsit în multe locuri şi tutoriale precum şi).
Compila si rula instrucţiuni de gcc file_name.c ; ./a.out
Compară şi Swap
# Include# Include / / De schimb - NewValue, comperand este vechi / aşteptat valoare / * * Funcţie face de fapt următorul lucru - în cazul în care valoarea de la * dest este egal cu oldvalue apoi înlocuiţi-l cu NewValue altfel se lasa neschimbat: nu toate acestea atomic * * Există două opţiuni pentru valoarea de returnare * Valoarea iniţială a 1.is * dest şi lasă povara fxn de asteptare pentru a se compara cu oldval * 2. face aici şi pentru a reveni 0 sau 1, acest lucru ar trebui să fie mai eficientă ** / / * Schimbă mai târziu, în macro * / CAS int (int * dest, int oldvalue, int NewValue) { printf ("(% d,% d,% d)", * dest, oldvalue, NewValue); / * Int CAS (int dest, int oldvalue, int NewValue) {* / / * Int CAS (int dest, int NewValue, int oldvalue) {* / Rezultatul int = 1 ;/ * 1 arată că CAS reuşit şi 0 arată că a eşuat * / / * BTW nevoie pentru a seta CC pentru pavilion platesti! * / __asm__ __ volatile__ ( "Movl% 2,%% eax \ n \ t" "Movl% 3,%% ebx \ n \ t" "0% movl,%% ecx \ n \ t" "LOCK \ n \ t" "CMPXCHG% ebx%, (%% ecx) \ n \ t" / * ar trebui să fie LOCK de pe aceeaşi linie * / "JZ DONE \ n \ t" "Movl $ 0, 1% \ n \ t" "DONE: \ n \ t" : "M =" (destinatie), "= g" (rezultat) : "G" (oldvalue), "G" (NewValue), "M" (destinatie) : "% EAX", "% ebx", "ecx", "cc" ); printf ("(% d,% d,% d)", * dest, oldvalue, NewValue); a reveni rezultat; } / * TODO * A scrie un alt fxn al AŞM, care pune mai sus, fxn într-o buclă în timp ce încerca şi să păstreze excepţia cazului în care aceasta reuşeşte * / int main () { int a = 5, b = 6; int * c = (int *) malloc (sizeof (int)); * C = 6; / * Int c = 6; * / printf ("% d \ n", CAS (c, b, b)); printf ("% d \ n", CAS (c, b, a)); printf ("% d \ n", CAS (c, a, a)); printf ("% d \ n", CAS (c, b, b)); * C = 6; / * C = 5; * / printf ("valoare schimbarea de la C *% d \ n", * c); printf ("% d \ n", CAS (c, b, b)); printf ("% d \ n", CAS (c, b, a)); printf ("% d \ n", CAS (c, a, a)); printf ("% d \ n", CAS (c, a, b)); printf ("% d \ n", CAS (c, b, a)); return 0; }
Note de formatare - se pare ca evidenţiere Sintaxa WP este adăugarea în final, că ignora.
GCD
# Includeint cmmdc (int a, int b) { int rezultat; / * Compute mai mare divizor comun folosind algoritmul lui Euclid * / __ volatile__ __asm__ ("movl% 1,%% eax;" "Movl% 2,%,% ebx;" "CONTD: cmpl $ 0,%% ebx;" "Je făcut;" "Xorl%% EDX, EDX%%;" "Idivl%% ebx;" "Movl% ebx%,%% eax;" "Movl%% EDX,% ebx%;" "JMP CONTD;" "DONE: movl%% EAX,% 0;": "= g" (rezultat): "g" (a), "G" (b) ); a reveni rezultat; } int main () { int prima secundă,; printf ("Introduceti doua numere:"); scanf ("% d% d", şi în primul rând, şi al doilea); printf ("% d de GCD &% d este% d \ n", prima, a doua, cmmdc (prima, a doua)); return 0; }
Lumea Cricketing aşteaptă o Noua Ordine Mondiala
Dupa o serie de cinci teste şi se întinde pe aproximativ două luni, cenuşii regenerate Anglia.
Să vorbim despre prima echipa câştigătoare - ordinea lor de mijloc este "medie", dacă nu doriţi să critice. Contribuţia Greame Swann cu BAT va conta nu mai puţin de contribuţie cu mingea. Stuart Broad - cel mai bun all rounder de pornire a fost de non pentru testul 5. Andrew Strauss a fost jucătorul doar coerent şi Jimmy Anderson a fost jucătorul doar coerent.
Punctul de aici nu este de a mustra realizările din echipa câştigătoare, dar pentru a pune în perspectivă, faptul că, în ciuda toate acestea, Australia a pierdut. va trebui să se gândească pentru cateva secunde, în cazul în care a cerut să numească jucătorul lor cel mai bun. Dreapta, a fost BW Hilfenhaus. Hauritz depăşit aşteptările everbody, dar nu era încă suficient de bun pentru a fi selectat pentru două din cele cinci teste. Africa de Sud nu a devenit niciodată un bătăuş lume fără un tors de clasă mondială, Australia nu poate spera să rămână unul fără un un destul de bun, cel puţin. Magicianul a părăsit scena si nu mai arata ca arta, uita magie. Ponting standuri înalt, printre muritorii de mici şi Michael Clarke se ridică foarte des, dar că le face o echipa cu cativa jucatori foarte buni si nu o echipa foarte buna.
Cenuşă 2009 va fi amintit pentru Ashes ultimele Andrew Flintoff lui, sosire Stuart Broad ca un all rounder (în cazul în care, adaugă el ceva mai mult de folclor Ashes la începutul lui promiţător), şi una din secolul al debut cea mai elocventă din toate timpurile de către Trott, dar aceasta va fi, de asemenea, amintit ca punctul în care FI şi Scopuri despre supremaţia Australia, au fost puse în cele din urmă să se odihnească, acesta este de peste. Nu ma intelegeti gresit, inca mai pot scoate la iveală Mike Hussey sau Stuart Clark, dar te simti contribuţia tuturor somitatilor de timp atunci când acestea dispar. Uneori, ei vin pentru a vă reaminti de ei înşişi în IPL, dar totuşi ele nu pot fi înlocuite. Să simt binecuvântat pentru că a văzut Warne, McGrath şi Gilchrist joc împreună şi de a fi susţinut de Waughs, Ponting, Hyden, Martin şi Langer.
Mergând mai departe, Africa de Sud va rămâne mereu o echipă foarte bună, dar au nevoie să câştige semifinale şi să fie mai coerentă în jurul globului, Pakistan va rămâne enigmatic genial, arme indieni tineri vor găsi, probabil, este greu pentru a umple pantofi de predecesorilor extraordinare. Sri Lanka ar trebui să continue să arate sclipiri de artă în ambarcaţiuni. Dar, am putea avea să aşteptaţi pentru cândva înainte de a avea o echipa din dominantă sau înainte de un căpitan se plânge de lipsa de concurenţă, aşa cum Steve Waugh a făcut o singură dată.
Pe o notă legate de - hai să salut revenirea Asif, el are o multime iad potenţial, să sperăm pentru a vedea o parte din şi de bun venit, de asemenea, flori Andy în awatar nou, chiar nu puteţi ţine oameni buni jos pentru mult timp.
Ruby garnituri de a crea un hash
Ieri în timp ce trece printr-unul din programele mele vechi, am găsit acest lucru scris de mine cândva înapoi:
#begin magic
hash=Hash[*CGI.unescape(raw_text).split('&').map{|x| b=x.split("=");b.push(nil) if b.size==1;b}.flatten]
#end magic
Pentru a ucide o parte de suspans permiteţi-mi să dezvăluie că arată ca raw_text
, Dreapta a fost redus de la confirmarea de plată PayPal.
Deasupra liniei, dacă rupt în părţi mai prevede:
unescaped_array = CGI.unescape (raw_text). Split ("&") unescaped_array = unescaped_array.collect {| x | = b x.split ("="); b.push (zero) în cazul în b.size == 1; b} flattened_array = unescaped_array.flatten hash = Hash [* flattened_array]
Să facem pasi individuali din IRB:
IRB (principal):. 009:0> unescaped_array = CGI.unescape (raw_text), Split ("&") => ["De succes", "mc_gross = 10.00", "protection_eligibility = neeligibile", "payer_id = U7PPJJ4TSJ47E", "taxa = 0.00", "payment_date = 09:45:30 10 iulie 2009 PDT", "payment_status = aşteptare "] IRB (principal): 013:0> unescaped_array = unescaped_array.map {| x | = b x.split ("="); b.push (zero) în cazul în b.size == 1; b} => [["De succes", zero], ["mc_gross", "10.00"], ["protection_eligibility", "neeligibile"], ["payer_id", "U7PPJJ4TSJ47E"], ["impozit", "0.00"] , ["payment_date", "09:45:30 10 iulie 2009 PDT"], ["payment_status", "aşteptare"]] IRB (principal): 014:0> flattened_array = unescaped_array.flatten => ["Succes", zero, "mc_gross", "10.00", "protection_eligibility", "neeligibile", "payer_id", "U7PPJJ4TSJ47E", "impozit", "0.00", "payment_date", "09:45: 30 10 iulie 2009 PDT "," payment_status "," aşteptare "] IRB (principal): 015:0> hash = Hash [* flattened_array] => {"Impozit" => "0.00", "payment_status" => "În aşteptarea", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10.00", "succesul" => zero, "payment_date" = > "09:45:30 10 iulie 2009 PDT", "protection_eligibility" => "neeligibile"}
BTW, * se numeşte operator de bulină în Ruby
Un alt mod de a crea de distribuire de "matrice de perechi", este de a utiliza injectaţi:
hash = [[1,2], [3,4]] injecta ({}). {| urmare, elementul de | rezultat [element.first] = rezultat [element.last];} rezultat Există o modalitate mai
Scrie o buclă, pe care o voi lăsa ca un exerciţiu de cititori!
Aici este un caz pic de utilizare independent de crearea de reţele de distribuire din:
IRB (principal): 005:0> [1,2,3,4,7,9] group_by {| x | x <5.? : Mai mică :: mai mare} => {: Mai mică => [1, 2, 3, 4],: o mai mare => [7, 9]}
Puteţi face mai multe lucruri, în principal din cauza bloc este folosit ca o cheie pentru acel element din hash rezultat.
Gmail, Mutt şi msmtp fix
Dacă utilizaţi mutt şi SMTP pentru a accesa Gmail. Aici este o veste (proastă). Baietii cool de la Google a schimbat din nou certificat. Oh, am să vă întreb - cum îl ştii? Mutt simplă început să se plângă despre certificatul de rău atunci când încearcă să utilizeze msmpt, infamul "msmtp: certificat de verificare TLS eşuat:. Certificatul nu a primit un emitent cunoscut" a salutat-mă pe ecran.
Pentru a traversa confirma -
Doar rula în urma
$ msmtp --serverinfo --host=smtp.gmail.com --tls=on --port=587 --tls-certcheck=off
În loc de Server Thwate vechi acum te-ai urma în segmentul de emitent
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US
Din fericire, fix este simplu, aici este ceea ce aveţi nevoie pentru a face pe Debian
# apt-get install ca-certificates
# dpkg -s ca-certificates|grep Version
Version: 20090814
După această schimbare doar următoarea linie în tine ~~~V /. Msmtprc
tls_trust_file /certs/Thawte SSLWeb Server Roots/thawte Premium Server CA/Thawte Premium Server CA.pem
tls_trust_file /certs/Thawte SSLWeb Server Roots/thawte Premium Server CA/Thawte Premium Server CA.pem
la
tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt
Git şi Sondaje Awesome
Aici sunt două link-uri pentru studiu realizat de git (sistemul de control de versiune) şi minunat (managerul de ferestre) comunitare. Dacă utilizaţi oricare dintre acestea, vă rugăm să luaţi nişte timp să completeze chestionarul. Ganditi-va ca cel mai simplu mod de a contribui înapoi la software-ul utilizat.
Aici sunt link-uri:
Git - http://www.survs.com/survey?id=2PIMZGU0&channel=Q0EKJ3NF54
Awesome - http://www.survs.com/survey?id=8BVEV3FO&channel=BH07CQ040D
Notă - (După cum sa constatat în aceste pagini, dar la partea de jos
) -
"Dacă aveţi cookie-urile activate, puteţi trimite mereu sondaj umplut parţial, şi de a reveni la răspunsurile dumneavoastră la timp mai târziu, finalizarea mai târziu."



































