Byla vydána nová verze 2.4.68 svobodného multiplatformního webového serveru Apache (httpd). Řešeno je mimo jiné 13 zranitelností.
Apple na své vývojářské konferenci WWDC26 (Worldwide Developers Conference, keynote) představil řadu novinek. Vypíchnout lze novou generaci Apple Intelligence a zbrusu novou Siri, která dostala název Siri AI. Kvůli Aktu o digitálních trzích (DMA) však funkce Siri AI nebudou v systémech iOS 27 a iPadOS 27 k dispozici uživatelům v Evropské unii.
Byla vydána nová verze 1.18.0 distribučního frameworku Flatpak (Wikipedie), tj. technologie umožňující distribuovat aplikace v podobě jednoho instalačního souboru na různé linuxové distribuce a jejich různá vydání. Přehled novinek na GitHubu. Vypíchnout lze podporu rozhraní /dev/kfd pro výpočty na kartách AMD (AMDKFD).
aMule (Wikipedie), tj. multiplatformní klient pro peer-to-peer sdílení souborů pro sítě eD2k and Kademlia, byl po více než pěti letech od vydání poslední verze 2.3.3, vydán v nové major verzi 3.0.0 (GitHub). S novou webovou stránkou a dokumentací.
Byly vyhlášeni vítězové a zveřejněny vítězné zdrojové kódy (YouTube, GitHub) již 29. ročníku soutěže International Obfuscated C Code Contest (IOCCC), tj. soutěže o nejnepřehlednější (nejobfuskovanější) zdrojový kód v jazyce C.
Evropská komise předložila evropský balíček pro technologickou suverenitu, tedy soubor opatření, která mají posílit kapacity EU v oblasti polovodičů, umělé inteligence, cloudu a open source. To Evropě pomůže stát se lídrem v oblasti umělé inteligence, posílit její digitální autonomii a vytvářet podmínky pro udržitelnější digitální budoucnost.
OpenCV (Open Source Computer Vision, Wikipedie), tj. open source multiplatformní knihovna pro zpracování obrazu a počítačové vidění, byla vydána v nové major verzi 5.
Byla vydána nová verze 9.7 multiplatformní digitální pracovní stanice pro práci s audiem (DAW) Ardour. Přehled novinek, vylepšení a oprav v poznámkách k vydání.
Vývojáři webového prohlížeče Ladybird dnes oznámili, že mění způsob vývoje. S blížícím se vydáním alfa verze přestávají přijímat veřejné pull requesty. Všechny otevřené veřejné pull requesty budou uzavřeny. Tým nedokáže garantovat bezpečnost AI generovaných pull requestů.
OpenLogi (GitHub) je open source náhrada aplikace Logi Options+ pro přizpůsobení myší od společnosti Logitech. Zatím běží pouze na macOS.
Zdravim, mam nasledujici kod kompilovany v FreeBSD 8.0-RELEASE-p4 pomoci g++ -pthread neco.cpp:
#include <cstdlib>
#include <iostream>
#include <pthread.h>
using namespace std;
int main(int argc, char** argv) {
pthread_mutex_t mymutex = PTHREAD_MUTEX_INITIALIZER;
do {
pthread_mutex_lock(&mymutex);
std::cout << "Hello!!" << std::endl;
} while (1);
return 0;
}
Pod linuxem vse bezi jak ma (zasekne se na mutexu a zustane deadlock), ale na freebsd se cykluje vypisuje text porad dokola. U multithreadovych programu jede jen jednim threadem. Nevite prosim nekdo co delam spatne ? Diky
1. Ve freebsd je to dobre. Kdyz thread vlastni lock tak pri vicenasobnem zamykani nemusi uz cekat. Tuhle vlastnost melo freebsd odjakziva.A určitě to má platit i pro pthread? Protože podle Single Unix Specification by se to mělo zablokovat, protože jde o normální mutex (nikoliv rekurzivní).
PTHREAD_MUTEX_DEFAULT, ktery podle odkazovaneho materialu:
If the mutex type is PTHREAD_MUTEX_DEFAULT,
attempting to recursively lock the mutex results in undefined behaviour.
Attempting to unlock the mutex if it was not locked by the calling thread results in undefined behaviour.
Attempting to unlock the mutex if it is not locked results in undefined behaviour.
To ze v Linuxu je PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL neni mozno ocekavat vsude (a ve FreeBSD to take neplati).
Tady bych s tim nesouhlasil.A zcela správně
. Moje chyba: nějak jsem to nedočetl a předpokládal jsem, že NORMAL je výchozí hodnota vždy.
Ze zvědavosti (protože jsem to nedokázal najít): ve FreeBSD platí PTHREAD_MUTEX_DEFAULT == PTHREAD_MUTEX_RECURSIVE nebo ten výchozí typ je nějaký speciální?
/usr/include/pthread.h:
/*
* Mutex types (Single UNIX Specification, Version 2, 1997).
*
* Note that a mutex attribute with one of the following types:
*
* PTHREAD_MUTEX_NORMAL
* PTHREAD_MUTEX_RECURSIVE
*
* will deviate from POSIX specified semantics.
*/
enum pthread_mutextype {
PTHREAD_MUTEX_ERRORCHECK = 1, /* Default POSIX mutex */
PTHREAD_MUTEX_RECURSIVE = 2, /* Recursive mutex */
PTHREAD_MUTEX_NORMAL = 3, /* No error checking */
PTHREAD_MUTEX_ADAPTIVE_NP = 4, /* Adaptive mutex, spins briefly before blocking on lock */
PTHREAD_MUTEX_TYPE_MAX
};
#define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_ERRORCHECK
PTHREAD_MUTEX_INITIALIZER by měl použít PTHREAD_MUTEX_DEFAULT) by výchozí mutex neměl být rekurzivní, ale pouze error checking a tudíž by ten původní kód měl zamknout mutex (při prvním cyklu) a následné volání by mělo vracet EDEADLK. Je to tak nebo je tam ještě nějaký háček? Dík
Mělo by to jít snadno poznat tak, že přidáte kontrolu návratové hodnoty.To je mi jasný
, jen nemám kde si to vyzkoušet a tak se ptám.
1. Pokud je to tak jak rikate, tak cim muzu zajistit, aby se muj ukazkovy program choval podle ocekavani(tedy stejne jako na linuxu)? Mam ideu,ze budu mit vytvorena vlakna, ktera budou zastavena pomoci toho mutexu. Ja do nich v pripade potreby narvu data (zmenim data v objektu,ktery ma ta fce vlakna predany jako parametr) a vlaknu pustim odemcenim mutexu a po dokonceni operace se vlakno v cyclu zase vrati k tomu zamcenemu mutexu. Chci tak ridit thread pool pro obsluhu site. Tedy:
Pracovni vlakno:
for(;;){
pthread_mutex_lock(&mymutex);
do_work();
pthread_mutex_lock(&mymutex);
}
A odemikani pak v jinem vlakne pomoci:
pthread_mutex_unlock(&mymutex);
A odemikani pak v jinem vlakne pomoci: pthread_mutex_unlock(&mymutex);Nesmíte odemykat mutex v jiném vlákně, než které ho zamklo (resp. ono to možná někde bude fungovat, ale ...). Na to, co popisujete, jsou tu podmínkové proměnné, v pthread funkce pthread_cond_wait & spol.
Tiskni
Sdílej: